08 May, 2019

1 commit

  • Pull networking updates from David Miller:
    "Highlights:

    1) Support AES128-CCM ciphers in kTLS, from Vakul Garg.

    2) Add fib_sync_mem to control the amount of dirty memory we allow to
    queue up between synchronize RCU calls, from David Ahern.

    3) Make flow classifier more lockless, from Vlad Buslov.

    4) Add PHY downshift support to aquantia driver, from Heiner
    Kallweit.

    5) Add SKB cache for TCP rx and tx, from Eric Dumazet. This reduces
    contention on SLAB spinlocks in heavy RPC workloads.

    6) Partial GSO offload support in XFRM, from Boris Pismenny.

    7) Add fast link down support to ethtool, from Heiner Kallweit.

    8) Use siphash for IP ID generator, from Eric Dumazet.

    9) Pull nexthops even further out from ipv4/ipv6 routes and FIB
    entries, from David Ahern.

    10) Move skb->xmit_more into a per-cpu variable, from Florian
    Westphal.

    11) Improve eBPF verifier speed and increase maximum program size,
    from Alexei Starovoitov.

    12) Eliminate per-bucket spinlocks in rhashtable, and instead use bit
    spinlocks. From Neil Brown.

    13) Allow tunneling with GUE encap in ipvs, from Jacky Hu.

    14) Improve link partner cap detection in generic PHY code, from
    Heiner Kallweit.

    15) Add layer 2 encap support to bpf_skb_adjust_room(), from Alan
    Maguire.

    16) Remove SKB list implementation assumptions in SCTP, your's truly.

    17) Various cleanups, optimizations, and simplifications in r8169
    driver. From Heiner Kallweit.

    18) Add memory accounting on TX and RX path of SCTP, from Xin Long.

    19) Switch PHY drivers over to use dynamic featue detection, from
    Heiner Kallweit.

    20) Support flow steering without masking in dpaa2-eth, from Ioana
    Ciocoi.

    21) Implement ndo_get_devlink_port in netdevsim driver, from Jiri
    Pirko.

    22) Increase the strict parsing of current and future netlink
    attributes, also export such policies to userspace. From Johannes
    Berg.

    23) Allow DSA tag drivers to be modular, from Andrew Lunn.

    24) Remove legacy DSA probing support, also from Andrew Lunn.

    25) Allow ll_temac driver to be used on non-x86 platforms, from Esben
    Haabendal.

    26) Add a generic tracepoint for TX queue timeouts to ease debugging,
    from Cong Wang.

    27) More indirect call optimizations, from Paolo Abeni"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1763 commits)
    cxgb4: Fix error path in cxgb4_init_module
    net: phy: improve pause mode reporting in phy_print_status
    dt-bindings: net: Fix a typo in the phy-mode list for ethernet bindings
    net: macb: Change interrupt and napi enable order in open
    net: ll_temac: Improve error message on error IRQ
    net/sched: remove block pointer from common offload structure
    net: ethernet: support of_get_mac_address new ERR_PTR error
    net: usb: smsc: fix warning reported by kbuild test robot
    staging: octeon-ethernet: Fix of_get_mac_address ERR_PTR check
    net: dsa: support of_get_mac_address new ERR_PTR error
    net: dsa: sja1105: Fix status initialization in sja1105_get_ethtool_stats
    vrf: sit mtu should not be updated when vrf netdev is the link
    net: dsa: Fix error cleanup path in dsa_init_module
    l2tp: Fix possible NULL pointer dereference
    taprio: add null check on sched_nest to avoid potential null pointer dereference
    net: mvpp2: cls: fix less than zero check on a u32 variable
    net_sched: sch_fq: handle non connected flows
    net_sched: sch_fq: do not assume EDT packets are ordered
    net: hns3: use devm_kcalloc when allocating desc_cb
    net: hns3: some cleanup for struct hns3_enet_ring
    ...

    Linus Torvalds
     

07 May, 2019

1 commit

  • Pull crypto update from Herbert Xu:
    "API:
    - Add support for AEAD in simd
    - Add fuzz testing to testmgr
    - Add panic_on_fail module parameter to testmgr
    - Use per-CPU struct instead multiple variables in scompress
    - Change verify API for akcipher

    Algorithms:
    - Convert x86 AEAD algorithms over to simd
    - Forbid 2-key 3DES in FIPS mode
    - Add EC-RDSA (GOST 34.10) algorithm

    Drivers:
    - Set output IV with ctr-aes in crypto4xx
    - Set output IV in rockchip
    - Fix potential length overflow with hashing in sun4i-ss
    - Fix computation error with ctr in vmx
    - Add SM4 protected keys support in ccree
    - Remove long-broken mxc-scc driver
    - Add rfc4106(gcm(aes)) cipher support in cavium/nitrox"

    * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (179 commits)
    crypto: ccree - use a proper le32 type for le32 val
    crypto: ccree - remove set but not used variable 'du_size'
    crypto: ccree - Make cc_sec_disable static
    crypto: ccree - fix spelling mistake "protedcted" -> "protected"
    crypto: caam/qi2 - generate hash keys in-place
    crypto: caam/qi2 - fix DMA mapping of stack memory
    crypto: caam/qi2 - fix zero-length buffer DMA mapping
    crypto: stm32/cryp - update to return iv_out
    crypto: stm32/cryp - remove request mutex protection
    crypto: stm32/cryp - add weak key check for DES
    crypto: atmel - remove set but not used variable 'alg_name'
    crypto: picoxcell - Use dev_get_drvdata()
    crypto: crypto4xx - get rid of redundant using_sd variable
    crypto: crypto4xx - use sync skcipher for fallback
    crypto: crypto4xx - fix cfb and ofb "overran dst buffer" issues
    crypto: crypto4xx - fix ctr-aes missing output IV
    crypto: ecrdsa - select ASN1 and OID_REGISTRY for EC-RDSA
    crypto: ux500 - use ccflags-y instead of CFLAGS_.o
    crypto: ccree - handle tee fips error during power management resume
    crypto: ccree - add function to handle cryptocell tee fips error
    ...

    Linus Torvalds
     

03 May, 2019

1 commit


01 May, 2019

1 commit

  • Ying triggered a call trace when doing an asconf testing:

    BUG: scheduling while atomic: swapper/12/0/0x10000100
    Call Trace:
    [] dump_stack+0x19/0x1b
    [] __schedule_bug+0x64/0x72
    [] __schedule+0x9ba/0xa00
    [] __cond_resched+0x26/0x30
    [] _cond_resched+0x3a/0x50
    [] kmem_cache_alloc_node+0x38/0x200
    [] __alloc_skb+0x5d/0x2d0
    [] sctp_packet_transmit+0x610/0xa20 [sctp]
    [] sctp_outq_flush+0x2ce/0xc00 [sctp]
    [] sctp_outq_uncork+0x1c/0x20 [sctp]
    [] sctp_cmd_interpreter.isra.22+0xc8/0x1460 [sctp]
    [] sctp_do_sm+0xe1/0x350 [sctp]
    [] sctp_primitive_ASCONF+0x3d/0x50 [sctp]
    [] sctp_cmd_interpreter.isra.22+0x114/0x1460 [sctp]
    [] sctp_do_sm+0xe1/0x350 [sctp]
    [] sctp_assoc_bh_rcv+0xf4/0x1b0 [sctp]
    [] sctp_inq_push+0x51/0x70 [sctp]
    [] sctp_rcv+0xa8b/0xbd0 [sctp]

    As it shows, the first sctp_do_sm() running under atomic context (NET_RX
    softirq) invoked sctp_primitive_ASCONF() that uses GFP_KERNEL flag later,
    and this flag is supposed to be used in non-atomic context only. Besides,
    sctp_do_sm() was called recursively, which is not expected.

    Vlad tried to fix this recursive call in Commit c0786693404c ("sctp: Fix
    oops when sending queued ASCONF chunks") by introducing a new command
    SCTP_CMD_SEND_NEXT_ASCONF. But it didn't work as this command is still
    used in the first sctp_do_sm() call, and sctp_primitive_ASCONF() will
    be called in this command again.

    To avoid calling sctp_do_sm() recursively, we send the next queued ASCONF
    not by sctp_primitive_ASCONF(), but by sctp_sf_do_prm_asconf() in the 1st
    sctp_do_sm() directly.

    Reported-by: Ying Xu
    Signed-off-by: Xin Long
    Acked-by: Neil Horman
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Xin Long
     

25 Apr, 2019

1 commit

  • The flags field in 'struct shash_desc' never actually does anything.
    The only ostensibly supported flag is CRYPTO_TFM_REQ_MAY_SLEEP.
    However, no shash algorithm ever sleeps, making this flag a no-op.

    With this being the case, inevitably some users who can't sleep wrongly
    pass MAY_SLEEP. These would all need to be fixed if any shash algorithm
    actually started sleeping. For example, the shash_ahash_*() functions,
    which wrap a shash algorithm with the ahash API, pass through MAY_SLEEP
    from the ahash API to the shash API. However, the shash functions are
    called under kmap_atomic(), so actually they're assumed to never sleep.

    Even if it turns out that some users do need preemption points while
    hashing large buffers, we could easily provide a helper function
    crypto_shash_update_large() which divides the data into smaller chunks
    and calls crypto_shash_update() and cond_resched() for each chunk. It's
    not necessary to have a flag in 'struct shash_desc', nor is it necessary
    to make individual shash algorithms aware of this at all.

    Therefore, remove shash_desc::flags, and document that the
    crypto_shash_*() functions can be called from any context.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

20 Apr, 2019

1 commit

  • The SIOCGSTAMP/SIOCGSTAMPNS ioctl commands are implemented by many
    socket protocol handlers, and all of those end up calling the same
    sock_get_timestamp()/sock_get_timestampns() helper functions, which
    results in a lot of duplicate code.

    With the introduction of 64-bit time_t on 32-bit architectures, this
    gets worse, as we then need four different ioctl commands in each
    socket protocol implementation.

    To simplify that, let's add a new .gettstamp() operation in
    struct proto_ops, and move ioctl implementation into the common
    sock_ioctl()/compat_sock_ioctl_trans() functions that these all go
    through.

    We can reuse the sock_get_timestamp() implementation, but generalize
    it so it can deal with both native and compat mode, as well as
    timeval and timespec structures.

    Acked-by: Stefan Schmidt
    Acked-by: Neil Horman
    Acked-by: Marc Kleine-Budde
    Link: https://lore.kernel.org/lkml/CAK8P3a038aDQQotzua_QtKGhq8O9n+rdiz2=WDCp82ys8eUT+A@mail.gmail.com/
    Signed-off-by: Arnd Bergmann
    Acked-by: Willem de Bruijn
    Signed-off-by: David S. Miller

    Arnd Bergmann
     

18 Apr, 2019

1 commit


16 Apr, 2019

2 commits

  • sk_forward_alloc's updating is also done on rx path, but to be consistent
    we change to use sk_mem_charge() in sctp_skb_set_owner_r().

    In sctp_eat_data(), it's not enough to check sctp_memory_pressure only,
    which doesn't work for mem_cgroup_sockets_enabled, so we change to use
    sk_under_memory_pressure().

    When it's under memory pressure, sk_mem_reclaim() and sk_rmem_schedule()
    should be called on both RENEGE or CHUNK DELIVERY path exit the memory
    pressure status as soon as possible.

    Note that sk_rmem_schedule() is using datalen to make things easy there.

    Reported-by: Matteo Croce
    Tested-by: Matteo Croce
    Acked-by: Neil Horman
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • Now when sending packets, sk_mem_charge() and sk_mem_uncharge() have been
    used to set sk_forward_alloc. We just need to call sk_wmem_schedule() to
    check if the allocated should be raised, and call sk_mem_reclaim() to
    check if the allocated should be reduced when it's under memory pressure.

    If sk_wmem_schedule() returns false, which means no memory is allowed to
    allocate, it will block and wait for memory to become available.

    Note different from tcp, sctp wait_for_buf happens before allocating any
    skb, so memory accounting check is done with the whole msg_len before it
    too.

    Reported-by: Matteo Croce
    Tested-by: Matteo Croce
    Acked-by: Neil Horman
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     

13 Apr, 2019

1 commit


12 Apr, 2019

5 commits


02 Apr, 2019

1 commit

  • Syzbot report a kernel-infoleak:

    BUG: KMSAN: kernel-infoleak in _copy_to_user+0x16b/0x1f0 lib/usercopy.c:32
    Call Trace:
    _copy_to_user+0x16b/0x1f0 lib/usercopy.c:32
    copy_to_user include/linux/uaccess.h:174 [inline]
    sctp_getsockopt_peer_addrs net/sctp/socket.c:5911 [inline]
    sctp_getsockopt+0x1668e/0x17f70 net/sctp/socket.c:7562
    ...
    Uninit was stored to memory at:
    sctp_transport_init net/sctp/transport.c:61 [inline]
    sctp_transport_new+0x16d/0x9a0 net/sctp/transport.c:115
    sctp_assoc_add_peer+0x532/0x1f70 net/sctp/associola.c:637
    sctp_process_param net/sctp/sm_make_chunk.c:2548 [inline]
    sctp_process_init+0x1a1b/0x3ed0 net/sctp/sm_make_chunk.c:2361
    ...
    Bytes 8-15 of 16 are uninitialized

    It was caused by that th _pad field (the 8-15 bytes) of a v4 addr (saved in
    struct sockaddr_in) wasn't initialized, but directly copied to user memory
    in sctp_getsockopt_peer_addrs().

    So fix it by calling memset(addr->v4.sin_zero, 0, 8) to initialize _pad of
    sockaddr_in before copying it to user memory in sctp_v4_addr_to_user(), as
    sctp_v6_addr_to_user() does.

    Reported-by: syzbot+86b5c7c236a22616a72f@syzkaller.appspotmail.com
    Signed-off-by: Xin Long
    Tested-by: Alexander Potapenko
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller

    Xin Long
     

21 Mar, 2019

1 commit

  • In sctp_setsockopt_bindx()/__sctp_setsockopt_connectx(), it allocates
    memory with addrs_size which is passed from userspace. We used flag
    GFP_USER to put some more restrictions on it in Commit cacc06215271
    ("sctp: use GFP_USER for user-controlled kmalloc").

    However, since Commit c981f254cc82 ("sctp: use vmemdup_user() rather
    than badly open-coding memdup_user()"), vmemdup_user() has been used,
    which doesn't check GFP_USER flag when goes to vmalloc_*(). So when
    addrs_size is a huge value, it could exhaust memory and even trigger
    oom killer.

    This patch is to use memdup_user() instead, in which GFP_USER would
    work to limit the memory allocation with a huge addrs_size.

    Note we can't fix it by limiting 'addrs_size', as there's no demand
    for it from RFC.

    Reported-by: syzbot+ec1b7575afef85a0e5ca@syzkaller.appspotmail.com
    Fixes: c981f254cc82 ("sctp: use vmemdup_user() rather than badly open-coding memdup_user()")
    Signed-off-by: Xin Long
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller

    Xin Long
     

19 Mar, 2019

14 commits

  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_STREAM_SCHEDULER sockopt.

    Fixes: 7efba10d6bd2 ("sctp: add SCTP_FUTURE_ASOC and SCTP_CURRENT_ASSOC for SCTP_STREAM_SCHEDULER sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_EVENT sockopt.

    Fixes: d251f05e3ba2 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_EVENT sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_ENABLE_STREAM_RESET sockopt.

    Fixes: 99a62135e127 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_ENABLE_STREAM_RESET sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_DEFAULT_PRINFO sockopt.

    Fixes: 3a583059d187 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_DEFAULT_PRINFO sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_AUTH_DEACTIVATE_KEY sockopt.

    Fixes: 2af66ff3edc7 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_AUTH_DEACTIVATE_KEY sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_AUTH_DELETE_KEY sockopt.

    Fixes: 3adcc300603e ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_AUTH_DELETE_KEY sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_AUTH_ACTIVE_KEY sockopt.

    Fixes: bf9fb6ad4f29 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_AUTH_ACTIVE_KEY sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_AUTH_KEY sockopt.

    Fixes: 7fb3be13a236 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_AUTH_KEY sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_MAX_BURST sockopt.

    Fixes: e0651a0dc877 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_MAX_BURST sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_CONTEXT sockopt.

    Fixes: 49b037acca8c ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_CONTEXT sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_DEFAULT_SNDINFO sockopt.

    Fixes: 92fc3bd928c9 ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_DEFAULT_SNDINFO sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • A similar fix as Patch "sctp: fix ignoring asoc_id for tcp-style sockets on
    SCTP_DEFAULT_SEND_PARAM sockopt" on SCTP_DELAYED_SACK sockopt.

    Fixes: 9c5829e1c49e ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_DELAYED_SACK sockopt")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • Currently if the user pass an invalid asoc_id to SCTP_DEFAULT_SEND_PARAM
    on a TCP-style socket, it will silently ignore the new parameters.
    That's because after not finding an asoc, it is checking asoc_id against
    the known values of CURRENT/FUTURE/ALL values and that fails to match.

    IOW, if the user supplies an invalid asoc id or not, it should either
    match the current asoc or the socket itself so that it will inherit
    these later. Fixes it by forcing asoc_id to SCTP_FUTURE_ASSOC in case it
    is a TCP-style socket without an asoc, so that the values get set on the
    socket.

    Fixes: 707e45b3dc5a ("sctp: use SCTP_FUTURE_ASSOC and add SCTP_CURRENT_ASSOC for SCTP_DEFAULT_SEND_PARAM sockopt")
    Signed-off-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Marcelo Ricardo Leitner
     
  • Now sctp_copy_descendant() copies pd_lobby from old sctp scok to new
    sctp sock. If sctp_sock_migrate() returns error, it will panic when
    releasing new sock and trying to purge pd_lobby due to the incorrect
    pointers in pd_lobby.

    [ 120.485116] kasan: CONFIG_KASAN_INLINE enabled
    [ 120.486270] kasan: GPF could be caused by NULL-ptr deref or user
    [ 120.509901] Call Trace:
    [ 120.510443] sctp_ulpevent_free+0x1e8/0x490 [sctp]
    [ 120.511438] sctp_queue_purge_ulpevents+0x97/0xe0 [sctp]
    [ 120.512535] sctp_close+0x13a/0x700 [sctp]
    [ 120.517483] inet_release+0xdc/0x1c0
    [ 120.518215] __sock_release+0x1d2/0x2a0
    [ 120.519025] sctp_do_peeloff+0x30f/0x3c0 [sctp]

    We fix it by not copying sctp_sock pd_lobby in sctp_copy_descendan(),
    and skb_queue_head_init() can also be removed in sctp_sock_migrate().

    Reported-by: syzbot+85e0b422ff140b03672a@syzkaller.appspotmail.com
    Fixes: 89664c623617 ("sctp: sctp_sock_migrate() returns error if sctp_bind_addr_dup() fails")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     

13 Mar, 2019

1 commit

  • This also makes sctp_stream_alloc_(out|in) saner, in that they no longer
    allocate new flex_arrays/genradixes, they just preallocate more
    elements.

    This code does however have a suspicious lack of locking.

    Link: http://lkml.kernel.org/r/20181217131929.11727-7-kent.overstreet@gmail.com
    Signed-off-by: Kent Overstreet
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: Alexey Dobriyan
    Cc: Al Viro
    Cc: Dave Hansen
    Cc: Eric Paris
    Cc: Matthew Wilcox
    Cc: Paul Moore
    Cc: Pravin B Shelar
    Cc: Shaohua Li
    Cc: Stephen Smalley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kent Overstreet
     

09 Mar, 2019

4 commits

  • New ep's auth_hmacs should be set if old ep's is set, in case that
    net->sctp.auth_enable has been changed to 0 by users and new ep's
    auth_hmacs couldn't be set in sctp_endpoint_init().

    It can even crash kernel by doing:

    1. on server: sysctl -w net.sctp.auth_enable=1,
    sysctl -w net.sctp.addip_enable=1,
    sysctl -w net.sctp.addip_noauth_enable=0,
    listen() on server,
    sysctl -w net.sctp.auth_enable=0.
    2. on client: connect() to server.
    3. on server: accept() the asoc,
    sysctl -w net.sctp.auth_enable=1.
    4. on client: send() asconf packet to server.

    The call trace:

    [ 245.280251] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
    [ 245.286872] RIP: 0010:sctp_auth_calculate_hmac+0xa3/0x140 [sctp]
    [ 245.304572] Call Trace:
    [ 245.305091]
    [ 245.311287] sctp_sf_authenticate+0x110/0x160 [sctp]
    [ 245.312311] sctp_sf_eat_auth+0xf2/0x230 [sctp]
    [ 245.313249] sctp_do_sm+0x9a/0x2d0 [sctp]
    [ 245.321483] sctp_assoc_bh_rcv+0xed/0x1a0 [sctp]
    [ 245.322495] sctp_rcv+0xa66/0xc70 [sctp]

    It's because the old ep->auth_hmacs wasn't copied to the new ep while
    ep->auth_hmacs is used in sctp_auth_calculate_hmac() when processing
    the incoming auth chunks, and it should have been done when migrating
    sock.

    Reported-by: Ying Xu
    Signed-off-by: Xin Long
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller

    Xin Long
     
  • sctp_auth_init_hmacs() is called only when ep->auth_enable is set.
    It better to move up sctp_auth_init_hmacs() and remove auth_enable
    check in it and check auth_enable only once in sctp_endpoint_init().

    Signed-off-by: Xin Long
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller

    Xin Long
     
  • It should fail to create the new sk if sctp_bind_addr_dup() fails
    when accepting or peeloff an association.

    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • syzbot reported a NULL-ptr deref caused by that sched->init() in
    sctp_stream_init() set stream->rr_next = NULL.

    kasan: GPF could be caused by NULL-ptr deref or user memory access
    RIP: 0010:sctp_sched_rr_dequeue+0xd3/0x170 net/sctp/stream_sched_rr.c:141
    Call Trace:
    sctp_outq_dequeue_data net/sctp/outqueue.c:90 [inline]
    sctp_outq_flush_data net/sctp/outqueue.c:1079 [inline]
    sctp_outq_flush+0xba2/0x2790 net/sctp/outqueue.c:1205

    All sched info is saved in sout->ext now, in sctp_stream_init()
    sctp_stream_alloc_out() will not change it, there's no need to
    call sched->init() again, since sctp_outq_init() has already
    done it.

    Fixes: 5bbbbe32a431 ("sctp: introduce stream scheduler foundations")
    Reported-by: syzbot+4c9934f20522c0efd657@syzkaller.appspotmail.com
    Signed-off-by: Xin Long
    Acked-by: Neil Horman
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Xin Long
     

05 Mar, 2019

1 commit

  • The user msg is also copied to the abort packet when doing SCTP_ABORT in
    sctp_sendmsg_check_sflags(). When SCTP_SENDALL is set, iov_iter_revert()
    should have been called for sending abort on the next asoc with copying
    this msg. Otherwise, memcpy_from_msg() in sctp_make_abort_user() will
    fail and return error.

    Fixes: 4910280503f3 ("sctp: add support for snd flag SCTP_SENDALL process in sendmsg")
    Reported-by: Ying Xu
    Signed-off-by: Xin Long
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller

    Xin Long
     

03 Mar, 2019

1 commit


01 Mar, 2019

1 commit

  • According to Documentation/core-api/printk-formats.rst, size_t should be
    printed with %zu, rather than %Zu.

    In addition, using %Zu triggers a warning on clang (-Wformat-extra-args):

    net/sctp/chunk.c:196:25: warning: data argument not used by format string [-Wformat-extra-args]
    __func__, asoc, max_data);
    ~~~~~~~~~~~~~~~~^~~~~~~~~
    ./include/linux/printk.h:440:49: note: expanded from macro 'pr_warn_ratelimited'
    printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
    ./include/linux/printk.h:424:17: note: expanded from macro 'printk_ratelimited'
    printk(fmt, ##__VA_ARGS__); \
    ~~~ ^

    Fixes: 5b5e0928f742 ("lib/vsprintf.c: remove %Z support")
    Link: https://github.com/ClangBuiltLinux/linux/issues/378
    Signed-off-by: Matthias Maennich
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Matthias Maennich
     

25 Feb, 2019

1 commit

  • Three conflicts, one of which, for marvell10g.c is non-trivial and
    requires some follow-up from Heiner or someone else.

    The issue is that Heiner converted the marvell10g driver over to
    use the generic c45 code as much as possible.

    However, in 'net' a bug fix appeared which makes sure that a new
    local mask (MDIO_AN_10GBT_CTRL_ADV_NBT_MASK) with value 0x01e0
    is cleared.

    Signed-off-by: David S. Miller

    David S. Miller