04 Mar, 2020

2 commits

  • DEVLINK_ATTR_REGION_CHUNK_ADDR and DEVLINK_ATTR_REGION_CHUNK_LEN
    lack entries in the netlink policy. Corresponding nla_get_u64()s
    may read beyond the end of the message.

    Fixes: 4e54795a27f5 ("devlink: Add support for region snapshot read command")
    Signed-off-by: Jakub Kicinski
    Reviewed-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jakub Kicinski
     
  • DEVLINK_ATTR_PARAM_VALUE_DATA may have different types
    so it's not checked by the normal netlink policy. Make
    sure the attribute length is what we expect.

    Fixes: e3b7ca18ad7b ("devlink: Add param set command")
    Signed-off-by: Jakub Kicinski
    Reviewed-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

02 Mar, 2020

4 commits

  • Michael Chan says:

    ====================
    bnxt_en: 2 bug fixes.

    This first patch fixes a rare but possible crash in pci_disable_msix()
    when the MTU is changed. The 2nd patch fixes a regression in error
    code handling when flashing a file to NVRAM.

    Please also queue these for -stable. Thanks.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • After bnxt_hwrm_do_send_message() was updated to return standard error
    codes in a recent commit, a regression in bnxt_flash_package_from_file()
    was introduced. The return value does not properly reflect all
    possible firmware errors when calling firmware to flash the package.

    Fix it by consolidating all errors in one local variable rc instead
    of having 2 variables for different errors.

    Fixes: d4f1420d3656 ("bnxt_en: Convert error code in firmware message response to standard code.")
    Signed-off-by: Edwin Peer
    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Edwin Peer
     
  • MTU changes may affect the number of IRQs so we must call
    bnxt_close_nic()/bnxt_open_nic() with the irq_re_init parameter
    set to true. The reason is that a larger MTU may require
    aggregation rings not needed with smaller MTU. We may not be
    able to allocate the required number of aggregation rings and
    so we reduce the number of channels which will change the number
    of IRQs. Without this patch, it may crash eventually in
    pci_disable_msix() when the IRQs are not properly unwound.

    Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
    Signed-off-by: Vasundhara Volam
    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Vasundhara Volam
     
  • On all PHY drivers that implement did_interrupt() reading the interrupt
    status bits clears them. This means we may loose an interrupt that
    is triggered between calling did_interrupt() and phy_clear_interrupt().
    As part of the fix make it a requirement that did_interrupt() clears
    the interrupt.

    The Fixes tag refers to the first commit where the patch applies
    cleanly.

    Fixes: 49644e68f472 ("net: phy: add callback for custom interrupt handler to struct phy_driver")
    Reported-by: Michael Walle
    Signed-off-by: Heiner Kallweit
    Signed-off-by: David S. Miller

    Heiner Kallweit
     

01 Mar, 2020

6 commits

  • Fixes the following NULL pointer dereference on PHY connect error path
    teardown:

    [ 2.291010] sja1105 spi0.1: Probed switch chip: SJA1105T
    [ 2.310044] sja1105 spi0.1: Enabled switch tagging
    [ 2.314970] fsl-gianfar soc:ethernet@2d90000 eth2: error -19 setting up slave phy
    [ 2.322463] 8] lr : [] psr: 60000013
    [ 2.378845] sp : eeac3d30 ip : eeab1900 fp : eef45480
    [ 2.384036] r10: eef4549c r9 : 00000001 r8 : 00000000
    [ 2.389227] r7 : eef527c0 r6 : 00000034 r5 : ed8ddd0c r4 : ed8ddc40
    [ 2.395714] r3 : 00000000 r2 : 00000000 r1 : eef4549c r0 : 00000000
    [ 2.402204] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
    [ 2.409297] Control: 10c5387d Table: 8020406a DAC: 00000051
    [ 2.415008] Process kworker/1:1 (pid: 64, stack limit = 0x(ptrval))
    [ 2.421237] Stack: (0xeeac3d30 to 0xeeac4000)
    [ 2.612635] [] (kthread_destroy_worker) from [] (sja1105_teardown+0x70/0xb4)
    [ 2.621379] [] (sja1105_teardown) from [] (dsa_switch_teardown.part.1+0x48/0x74)
    [ 2.630467] [] (dsa_switch_teardown.part.1) from [] (dsa_register_switch+0x8b0/0xbf4)
    [ 2.639984] [] (dsa_register_switch) from [] (sja1105_probe+0x2ac/0x464)
    [ 2.648378] [] (sja1105_probe) from [] (spi_drv_probe+0x7c/0xa0)
    [ 2.656081] [] (spi_drv_probe) from [] (really_probe+0x208/0x480)
    [ 2.663871] [] (really_probe) from [] (driver_probe_device+0x78/0x1c4)
    [ 2.672093] [] (driver_probe_device) from [] (bus_for_each_drv+0x80/0xc4)
    [ 2.680574] [] (bus_for_each_drv) from [] (__device_attach+0xd0/0x168)
    [ 2.688794] [] (__device_attach) from [] (bus_probe_device+0x84/0x8c)
    [ 2.696927] [] (bus_probe_device) from [] (deferred_probe_work_func+0x84/0xc4)
    [ 2.705842] [] (deferred_probe_work_func) from [] (process_one_work+0x22c/0x560)
    [ 2.714926] [] (process_one_work) from [] (worker_thread+0x2a8/0x5d4)
    [ 2.723059] [] (worker_thread) from [] (kthread+0x150/0x154)
    [ 2.730416] [] (kthread) from [] (ret_from_fork+0x14/0x2c)

    Checking for NULL pointer is correct because the per-port xmit kernel
    threads are created in sja1105_probe immediately after calling
    dsa_register_switch.

    Fixes: a68578c20a96 ("net: dsa: Make deferred_xmit private to sja1105")
    Signed-off-by: Vladimir Oltean
    Signed-off-by: David S. Miller

    Vladimir Oltean
     
  • When we add peer address with metric configured, IPv4 could set the dest
    metric correctly, but IPv6 do not. e.g.

    ]# ip addr add 192.0.2.1 peer 192.0.2.2/32 dev eth1 metric 20
    ]# ip route show dev eth1
    192.0.2.2 proto kernel scope link src 192.0.2.1 metric 20
    ]# ip addr add 2001:db8::1 peer 2001:db8::2/128 dev eth1 metric 20
    ]# ip -6 route show dev eth1
    2001:db8::1 proto kernel metric 20 pref medium
    2001:db8::2 proto kernel metric 256 pref medium

    Fix this by using configured metric instead of default one.

    Reported-by: Jianlin Shi
    Fixes: 8308f3ff1753 ("net/ipv6: Add support for specifying metric of connected routes")
    Reviewed-by: David Ahern
    Signed-off-by: Hangbin Liu
    Signed-off-by: David S. Miller

    Hangbin Liu
     
  • If the switch is not hardware reset on a warm boot, interrupts can be
    left enabled, and possibly pending. This will cause us to enter an
    infinite loop trying to service an interrupt we are unable to handle,
    thereby preventing the kernel from booting.

    Ensure that the global 2 interrupt sources are disabled before we claim
    the parent interrupt.

    Observed on the ZII development revision B and C platforms with
    reworked serdes support, and using reboot -f to reboot the platform.

    Fixes: dc30c35be720 ("net: dsa: mv88e6xxx: Implement interrupt support.")
    Signed-off-by: Russell King
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Russell King
     
  • When debugging via PRINTK() is not enabled, make the PRINTK()
    macro be an empty do-while block.

    Thix fixes a gcc warning when -Wextra is set:
    ../drivers/atm/nicstar.c:1819:23: warning: suggest braces around empty body in an ‘else’ statement [-Wempty-body]

    I have verified that there is no object code change (with gcc 7.5.0).

    Signed-off-by: Randy Dunlap
    Cc: Chas Williams
    Cc: linux-atm-general@lists.sourceforge.net
    Cc: netdev@vger.kernel.org
    Cc: David S. Miller
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Userspace might send a batch that is composed of several netlink
    messages. The netlink_ack() function must use the pointer to the netlink
    header as base to calculate the bad attribute offset.

    Fixes: 2d4bc93368f5 ("netlink: extended ACK reporting")
    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: David S. Miller

    Pablo Neira Ayuso
     
  • Dell USB Type C docking WD19/WD19DC attaches additional peripherals as:

    /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
    |__ Port 1: Dev 11, If 0, Class=Hub, Driver=hub/4p, 5000M
    |__ Port 3: Dev 12, If 0, Class=Hub, Driver=hub/4p, 5000M
    |__ Port 4: Dev 13, If 0, Class=Vendor Specific Class,
    Driver=r8152, 5000M

    where usb 2-1-3 is a hub connecting all USB Type-A/C ports on the dock.

    When hotplugging such dock with additional usb devices already attached on
    it, the probing process may reset usb 2.1 port, therefore r8152 ethernet
    device is also reset. However, during r8152 device init there are several
    for-loops that, when it's unable to retrieve hardware registers due to
    being disconnected from USB, may take up to 14 seconds each in practice,
    and that has to be completed before USB may re-enumerate devices on the
    bus. As a result, devices attached to the dock will only be available
    after nearly 1 minute after the dock was plugged in:

    [ 216.388290] [250] r8152 2-1.4:1.0: usb_probe_interface
    [ 216.388292] [250] r8152 2-1.4:1.0: usb_probe_interface - got id
    [ 258.830410] r8152 2-1.4:1.0 (unnamed net_device) (uninitialized): PHY not ready
    [ 258.830460] r8152 2-1.4:1.0 (unnamed net_device) (uninitialized): Invalid header when reading pass-thru MAC addr
    [ 258.830464] r8152 2-1.4:1.0 (unnamed net_device) (uninitialized): Get ether addr fail

    This happens in, for example, r8153_init:

    static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
    void *data, u16 type)
    {
    if (test_bit(RTL8152_UNPLUG, &tp->flags))
    return -ENODEV;
    ...
    }

    static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index)
    {
    u32 data;
    ...
    generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen);

    data = __le32_to_cpu(tmp);
    ...
    return (u16)data;
    }

    static void r8153_init(struct r8152 *tp)
    {
    ...
    if (test_bit(RTL8152_UNPLUG, &tp->flags))
    return;

    for (i = 0; i < 500; i++) {
    if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
    AUTOLOAD_DONE)
    break;
    msleep(20);
    }
    ...
    }

    Since ocp_read_word() doesn't check the return status of
    generic_ocp_read(), and the only exit condition for the loop is to have
    a match in the returned value, such loops will only ends after exceeding
    its maximum runs when the device has been marked as disconnected, which
    takes 500 * 20ms = 10 seconds in theory, 14 in practice.

    To solve this long latency another test to RTL8152_UNPLUG flag should be
    added after those 20ms sleep to skip unnecessary loops, so that the device
    probe can complete early and proceed to parent port reset/reprobe process.

    This can be reproduced on all kernel versions up to latest v5.6-rc2, but
    after v5.5-rc7 the reproduce rate is dramatically lowered to 1/30 or less
    while it was around 1/2.

    Signed-off-by: You-Sheng Yang
    Signed-off-by: David S. Miller

    You-Sheng Yang
     

28 Feb, 2020

26 commits

  • Pull networking fixes from David Miller:

    1) Fix leak in nl80211 AP start where we leak the ACL memory, from
    Johannes Berg.

    2) Fix double mutex unlock in mac80211, from Andrei Otcheretianski.

    3) Fix RCU stall in ipset, from Jozsef Kadlecsik.

    4) Fix devlink locking in devlink_dpipe_table_register, from Madhuparna
    Bhowmik.

    5) Fix race causing TX hang in ll_temac, from Esben Haabendal.

    6) Stale eth hdr pointer in br_dev_xmit(), from Nikolay Aleksandrov.

    7) Fix TX hash calculation bounds checking wrt. tc rules, from Amritha
    Nambiar.

    8) Size netlink responses properly in schedule action code to take into
    consideration TCA_ACT_FLAGS. From Jiri Pirko.

    9) Fix firmware paths for mscc PHY driver, from Antoine Tenart.

    10) Don't register stmmac notifier multiple times, from Aaro Koskinen.

    11) Various rmnet bug fixes, from Taehee Yoo.

    12) Fix vsock deadlock in vsock transport release, from Stefano
    Garzarella.

    * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (61 commits)
    net: dsa: mv88e6xxx: Fix masking of egress port
    mlxsw: pci: Wait longer before accessing the device after reset
    sfc: fix timestamp reconstruction at 16-bit rollover points
    vsock: fix potential deadlock in transport->release()
    unix: It's CONFIG_PROC_FS not CONFIG_PROCFS
    net: rmnet: fix packet forwarding in rmnet bridge mode
    net: rmnet: fix bridge mode bugs
    net: rmnet: use upper/lower device infrastructure
    net: rmnet: do not allow to change mux id if mux id is duplicated
    net: rmnet: remove rcu_read_lock in rmnet_force_unassociate_device()
    net: rmnet: fix suspicious RCU usage
    net: rmnet: fix NULL pointer dereference in rmnet_changelink()
    net: rmnet: fix NULL pointer dereference in rmnet_newlink()
    net: phy: marvell: don't interpret PHY status unless resolved
    mlx5: register lag notifier for init network namespace only
    unix: define and set show_fdinfo only if procfs is enabled
    hinic: fix a bug of rss configuration
    hinic: fix a bug of setting hw_ioctxt
    hinic: fix a irq affinity bug
    net/smc: check for valid ib_client_data
    ...

    Linus Torvalds
     
  • Add missing ~ to the usage of the mask.

    Reported-by: Kevin Benson
    Reported-by: Chris Healy
    Fixes: 5c74c54ce6ff ("net: dsa: mv88e6xxx: Split monitor port configuration")
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • During initialization the driver issues a reset to the device and waits
    for 100ms before checking if the firmware is ready. The waiting is
    necessary because before that the device is irresponsive and the first
    read can result in a completion timeout.

    While 100ms is sufficient for Spectrum-1 and Spectrum-2, it is
    insufficient for Spectrum-3.

    Fix this by increasing the timeout to 200ms.

    Fixes: da382875c616 ("mlxsw: spectrum: Extend to support Spectrum-3 ASIC")
    Signed-off-by: Amit Cohen
    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Amit Cohen
     
  • We can't just use the top bits of the last sync event as they could be
    off-by-one every 65,536 seconds, giving an error in reconstruction of
    65,536 seconds.

    This patch uses the difference in the bottom 16 bits (mod 2^16) to
    calculate an offset that needs to be applied to the last sync event to
    get to the current time.

    Signed-off-by: Alexandru-Mihai Maftei
    Acked-by: Martin Habets
    Signed-off-by: David S. Miller

    Alex Maftei (amaftei)
     
  • Some transports (hyperv, virtio) acquire the sock lock during the
    .release() callback.

    In the vsock_stream_connect() we call vsock_assign_transport(); if
    the socket was previously assigned to another transport, the
    vsk->transport->release() is called, but the sock lock is already
    held in the vsock_stream_connect(), causing a deadlock reported by
    syzbot:

    INFO: task syz-executor280:9768 blocked for more than 143 seconds.
    Not tainted 5.6.0-rc1-syzkaller #0
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    syz-executor280 D27912 9768 9766 0x00000000
    Call Trace:
    context_switch kernel/sched/core.c:3386 [inline]
    __schedule+0x934/0x1f90 kernel/sched/core.c:4082
    schedule+0xdc/0x2b0 kernel/sched/core.c:4156
    __lock_sock+0x165/0x290 net/core/sock.c:2413
    lock_sock_nested+0xfe/0x120 net/core/sock.c:2938
    virtio_transport_release+0xc4/0xd60 net/vmw_vsock/virtio_transport_common.c:832
    vsock_assign_transport+0xf3/0x3b0 net/vmw_vsock/af_vsock.c:454
    vsock_stream_connect+0x2b3/0xc70 net/vmw_vsock/af_vsock.c:1288
    __sys_connect_file+0x161/0x1c0 net/socket.c:1857
    __sys_connect+0x174/0x1b0 net/socket.c:1874
    __do_sys_connect net/socket.c:1885 [inline]
    __se_sys_connect net/socket.c:1882 [inline]
    __x64_sys_connect+0x73/0xb0 net/socket.c:1882
    do_syscall_64+0xfa/0x790 arch/x86/entry/common.c:294
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    To avoid this issue, this patch remove the lock acquiring in the
    .release() callback of hyperv and virtio transports, and it holds
    the lock when we call vsk->transport->release() in the vsock core.

    Reported-by: syzbot+731710996d79d0d58fbc@syzkaller.appspotmail.com
    Fixes: 408624af4c89 ("vsock: use local transport when it is loaded")
    Signed-off-by: Stefano Garzarella
    Reviewed-by: Stefan Hajnoczi
    Signed-off-by: David S. Miller

    Stefano Garzarella
     
  • Fixes: 3a12500ed5dd ("unix: define and set show_fdinfo only if procfs is enabled")
    Signed-off-by: David S. Miller

    David S. Miller
     
  • Taehee Yoo says:

    ====================
    net: rmnet: fix several bugs

    This patchset is to fix several bugs in RMNET module.

    1. The first patch fixes NULL-ptr-deref in rmnet_newlink().
    When rmnet interface is being created, it uses IFLA_LINK
    without checking NULL.
    So, if userspace doesn't set IFLA_LINK, panic will occur.
    In this patch, checking NULL pointer code is added.

    2. The second patch fixes NULL-ptr-deref in rmnet_changelink().
    To get real device in rmnet_changelink(), it uses IFLA_LINK.
    But, IFLA_LINK should not be used in rmnet_changelink().

    3. The third patch fixes suspicious RCU usage in rmnet_get_port().
    rmnet_get_port() uses rcu_dereference_rtnl().
    But, rmnet_get_port() is used by datapath.
    So, rcu_dereference_bh() should be used instead of rcu_dereference_rtnl().

    4. The fourth patch fixes suspicious RCU usage in
    rmnet_force_unassociate_device().
    RCU critical section should not be scheduled.
    But, unregister_netdevice_queue() in the rmnet_force_unassociate_device()
    would be scheduled.
    So, the RCU warning occurs.
    In this patch, the rcu_read_lock() in the rmnet_force_unassociate_device()
    is removed because it's unnecessary.

    5. The fifth patch fixes duplicate MUX ID case.
    RMNET MUX ID is unique.
    So, rmnet interface isn't allowed to be created, which have
    a duplicate MUX ID.
    But, only rmnet_newlink() checks this condition, rmnet_changelink()
    doesn't check this.
    So, duplicate MUX ID case would happen.

    6. The sixth patch fixes upper/lower interface relationship problems.
    When IFLA_LINK is used, the upper/lower infrastructure should be used.
    Because it checks the maximum depth of upper/lower interfaces and it also
    checks circular interface relationship, etc.
    In this patch, netdev_upper_dev_link() is used.

    7. The seventh patch fixes bridge related problems.
    a) ->ndo_del_slave() doesn't work.
    b) It couldn't detect circular upper/lower interface relationship.
    c) It couldn't prevent stack overflow because of too deep depth
    of upper/lower interface
    d) It doesn't check the number of lower interfaces.
    e) Panics because of several reasons.
    These problems are actually the same problem.
    So, this patch fixes these problems.

    8. The eighth patch fixes packet forwarding issue in bridge mode
    Packet forwarding is not working in rmnet bridge mode.
    Because when a packet is forwarded, skb_push() for an ethernet header
    is needed. But it doesn't call skb_push().
    So, the ethernet header will be lost.

    Change log:
    - update commit logs.
    - drop two patches in this patchset because of wrong target branch.
    - ("net: rmnet: add missing module alias")
    - ("net: rmnet: print error message when command fails")
    - remove unneessary rcu_read_lock() in the third patch.
    - use rcu_dereference_bh() instead of rcu_dereference in third patch.
    - do not allow to add a bridge device if rmnet interface is already
    bridge mode in the seventh patch.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Packet forwarding is not working in rmnet bridge mode.
    Because when a packet is forwarded, skb_push() for an ethernet header
    is needed. But it doesn't call skb_push().
    So, the ethernet header will be lost.

    Test commands:
    modprobe rmnet
    ip netns add nst
    ip netns add nst2
    ip link add veth0 type veth peer name veth1
    ip link add veth2 type veth peer name veth3
    ip link set veth1 netns nst
    ip link set veth3 netns nst2

    ip link add rmnet0 link veth0 type rmnet mux_id 1
    ip link set veth2 master rmnet0
    ip link set veth0 up
    ip link set veth2 up
    ip link set rmnet0 up
    ip a a 192.168.100.1/24 dev rmnet0

    ip netns exec nst ip link set veth1 up
    ip netns exec nst ip a a 192.168.100.2/24 dev veth1
    ip netns exec nst2 ip link set veth3 up
    ip netns exec nst2 ip a a 192.168.100.3/24 dev veth3
    ip netns exec nst2 ping 192.168.100.2

    Fixes: 60d58f971c10 ("net: qualcomm: rmnet: Implement bridge mode")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • In order to attach a bridge interface to the rmnet interface,
    "master" operation is used.
    (e.g. ip link set dummy1 master rmnet0)
    But, in the rmnet_add_bridge(), which is a callback of ->ndo_add_slave()
    doesn't register lower interface.
    So, ->ndo_del_slave() doesn't work.
    There are other problems too.
    1. It couldn't detect circular upper/lower interface relationship.
    2. It couldn't prevent stack overflow because of too deep depth
    of upper/lower interface
    3. It doesn't check the number of lower interfaces.
    4. Panics because of several reasons.

    The root problem of these issues is actually the same.
    So, in this patch, these all problems will be fixed.

    Test commands:
    modprobe rmnet
    ip link add dummy0 type dummy
    ip link add rmnet0 link dummy0 type rmnet mux_id 1
    ip link add dummy1 master rmnet0 type dummy
    ip link add dummy2 master rmnet0 type dummy
    ip link del rmnet0
    ip link del dummy2
    ip link del dummy1

    Splat looks like:
    [ 41.867595][ T1164] general protection fault, probably for non-canonical address 0xdffffc0000000101I
    [ 41.869993][ T1164] KASAN: null-ptr-deref in range [0x0000000000000808-0x000000000000080f]
    [ 41.872950][ T1164] CPU: 0 PID: 1164 Comm: ip Not tainted 5.6.0-rc1+ #447
    [ 41.873915][ T1164] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 41.875161][ T1164] RIP: 0010:rmnet_unregister_bridge.isra.6+0x71/0xf0 [rmnet]
    [ 41.876178][ T1164] Code: 48 89 ef 48 89 c6 5b 5d e9 fc fe ff ff e8 f7 f3 ff ff 48 8d b8 08 08 00 00 48 ba 00 7
    [ 41.878925][ T1164] RSP: 0018:ffff8880c4d0f188 EFLAGS: 00010202
    [ 41.879774][ T1164] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000101
    [ 41.887689][ T1164] RDX: dffffc0000000000 RSI: ffffffffb8cf64f0 RDI: 0000000000000808
    [ 41.888727][ T1164] RBP: ffff8880c40e4000 R08: ffffed101b3c0e3c R09: 0000000000000001
    [ 41.889749][ T1164] R10: 0000000000000001 R11: ffffed101b3c0e3b R12: 1ffff110189a1e3c
    [ 41.890783][ T1164] R13: ffff8880c4d0f200 R14: ffffffffb8d56160 R15: ffff8880ccc2c000
    [ 41.891794][ T1164] FS: 00007f4300edc0c0(0000) GS:ffff8880d9c00000(0000) knlGS:0000000000000000
    [ 41.892953][ T1164] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 41.893800][ T1164] CR2: 00007f43003bc8c0 CR3: 00000000ca53e001 CR4: 00000000000606f0
    [ 41.894824][ T1164] Call Trace:
    [ 41.895274][ T1164] ? rcu_is_watching+0x2c/0x80
    [ 41.895895][ T1164] rmnet_config_notify_cb+0x1f7/0x590 [rmnet]
    [ 41.896687][ T1164] ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [ 41.897611][ T1164] ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [ 41.898508][ T1164] ? __module_text_address+0x13/0x140
    [ 41.899162][ T1164] notifier_call_chain+0x90/0x160
    [ 41.899814][ T1164] rollback_registered_many+0x660/0xcf0
    [ 41.900544][ T1164] ? netif_set_real_num_tx_queues+0x780/0x780
    [ 41.901316][ T1164] ? __lock_acquire+0xdfe/0x3de0
    [ 41.901958][ T1164] ? memset+0x1f/0x40
    [ 41.902468][ T1164] ? __nla_validate_parse+0x98/0x1ab0
    [ 41.903166][ T1164] unregister_netdevice_many.part.133+0x13/0x1b0
    [ 41.903988][ T1164] rtnl_delete_link+0xbc/0x100
    [ ... ]

    Fixes: 60d58f971c10 ("net: qualcomm: rmnet: Implement bridge mode")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • netdev_upper_dev_link() is useful to manage lower/upper interfaces.
    And this function internally validates looping, maximum depth.
    All or most virtual interfaces that could have a real interface
    (e.g. macsec, macvlan, ipvlan etc.) use lower/upper infrastructure.

    Test commands:
    modprobe rmnet
    ip link add dummy0 type dummy
    ip link add rmnet1 link dummy0 type rmnet mux_id 1
    for i in {2..100}
    do
    let A=$i-1
    ip link add rmnet$i link rmnet$A type rmnet mux_id $i
    done
    ip link del dummy0

    The purpose of the test commands is to make stack overflow.

    Splat looks like:
    [ 52.411438][ T1395] BUG: KASAN: slab-out-of-bounds in find_busiest_group+0x27e/0x2c00
    [ 52.413218][ T1395] Write of size 64 at addr ffff8880c774bde0 by task ip/1395
    [ 52.414841][ T1395]
    [ 52.430720][ T1395] CPU: 1 PID: 1395 Comm: ip Not tainted 5.6.0-rc1+ #447
    [ 52.496511][ T1395] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 52.513597][ T1395] Call Trace:
    [ 52.546516][ T1395]
    [ 52.558773][ T1395] Allocated by task 3171537984:
    [ 52.588290][ T1395] BUG: unable to handle page fault for address: ffffffffb999e260
    [ 52.589311][ T1395] #PF: supervisor read access in kernel mode
    [ 52.590529][ T1395] #PF: error_code(0x0000) - not-present page
    [ 52.591374][ T1395] PGD d6818067 P4D d6818067 PUD d6819063 PMD 0
    [ 52.592288][ T1395] Thread overran stack, or stack corrupted
    [ 52.604980][ T1395] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI
    [ 52.605856][ T1395] CPU: 1 PID: 1395 Comm: ip Not tainted 5.6.0-rc1+ #447
    [ 52.611764][ T1395] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 52.621520][ T1395] RIP: 0010:stack_depot_fetch+0x10/0x30
    [ 52.622296][ T1395] Code: ff e9 f9 fe ff ff 48 89 df e8 9c 1d 91 ff e9 ca fe ff ff cc cc cc cc cc cc cc 89 f8 0
    [ 52.627887][ T1395] RSP: 0018:ffff8880c774bb60 EFLAGS: 00010006
    [ 52.628735][ T1395] RAX: 00000000001f8880 RBX: ffff8880c774d140 RCX: 0000000000000000
    [ 52.631773][ T1395] RDX: 000000000000001d RSI: ffff8880c774bb68 RDI: 0000000000003ff0
    [ 52.649584][ T1395] RBP: ffffea00031dd200 R08: ffffed101b43e403 R09: ffffed101b43e403
    [ 52.674857][ T1395] R10: 0000000000000001 R11: ffffed101b43e402 R12: ffff8880d900e5c0
    [ 52.678257][ T1395] R13: ffff8880c774c000 R14: 0000000000000000 R15: dffffc0000000000
    [ 52.694541][ T1395] FS: 00007fe867f6e0c0(0000) GS:ffff8880da000000(0000) knlGS:0000000000000000
    [ 52.764039][ T1395] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 52.815008][ T1395] CR2: ffffffffb999e260 CR3: 00000000c26aa005 CR4: 00000000000606e0
    [ 52.862312][ T1395] Call Trace:
    [ 52.887133][ T1395] Modules linked in: dummy rmnet veth openvswitch nsh nf_conncount nf_nat nf_conntrack nf_dex
    [ 52.936749][ T1395] CR2: ffffffffb999e260
    [ 52.965695][ T1395] ---[ end trace 7e32ca99482dbb31 ]---
    [ 52.966556][ T1395] RIP: 0010:stack_depot_fetch+0x10/0x30
    [ 52.971083][ T1395] Code: ff e9 f9 fe ff ff 48 89 df e8 9c 1d 91 ff e9 ca fe ff ff cc cc cc cc cc cc cc 89 f8 0
    [ 53.003650][ T1395] RSP: 0018:ffff8880c774bb60 EFLAGS: 00010006
    [ 53.043183][ T1395] RAX: 00000000001f8880 RBX: ffff8880c774d140 RCX: 0000000000000000
    [ 53.076480][ T1395] RDX: 000000000000001d RSI: ffff8880c774bb68 RDI: 0000000000003ff0
    [ 53.093858][ T1395] RBP: ffffea00031dd200 R08: ffffed101b43e403 R09: ffffed101b43e403
    [ 53.112795][ T1395] R10: 0000000000000001 R11: ffffed101b43e402 R12: ffff8880d900e5c0
    [ 53.139837][ T1395] R13: ffff8880c774c000 R14: 0000000000000000 R15: dffffc0000000000
    [ 53.141500][ T1395] FS: 00007fe867f6e0c0(0000) GS:ffff8880da000000(0000) knlGS:0000000000000000
    [ 53.143343][ T1395] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 53.152007][ T1395] CR2: ffffffffb999e260 CR3: 00000000c26aa005 CR4: 00000000000606e0
    [ 53.156459][ T1395] Kernel panic - not syncing: Fatal exception
    [ 54.213570][ T1395] Shutting down cpus with NMI
    [ 54.354112][ T1395] Kernel Offset: 0x33000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0x)
    [ 54.355687][ T1395] Rebooting in 5 seconds..

    Fixes: b37f78f234bf ("net: qualcomm: rmnet: Fix crash on real dev unregistration")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • Basically, duplicate mux id isn't be allowed.
    So, the creation of rmnet will be failed if there is duplicate mux id
    is existing.
    But, changelink routine doesn't check duplicate mux id.

    Test commands:
    modprobe rmnet
    ip link add dummy0 type dummy
    ip link add rmnet0 link dummy0 type rmnet mux_id 1
    ip link add rmnet1 link dummy0 type rmnet mux_id 2
    ip link set rmnet1 type rmnet mux_id 1

    Fixes: 23790ef12082 ("net: qualcomm: rmnet: Allow to configure flags for existing devices")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • The notifier_call() of the slave interface removes rmnet interface with
    unregister_netdevice_queue().
    But, before calling unregister_netdevice_queue(), it acquires
    rcu readlock.
    In the RCU critical section, sleeping isn't be allowed.
    But, unregister_netdevice_queue() internally calls synchronize_net(),
    which would sleep.
    So, suspicious RCU usage warning occurs.

    Test commands:
    modprobe rmnet
    ip link add dummy0 type dummy
    ip link add dummy1 type dummy
    ip link add rmnet0 link dummy0 type rmnet mux_id 1
    ip link set dummy1 master rmnet0
    ip link del dummy0

    Splat looks like:
    [ 79.639245][ T1195] =============================
    [ 79.640134][ T1195] WARNING: suspicious RCU usage
    [ 79.640852][ T1195] 5.6.0-rc1+ #447 Not tainted
    [ 79.641657][ T1195] -----------------------------
    [ 79.642472][ T1195] ./include/linux/rcupdate.h:273 Illegal context switch in RCU read-side critical section!
    [ 79.644043][ T1195]
    [ 79.644043][ T1195] other info that might help us debug this:
    [ 79.644043][ T1195]
    [ 79.645682][ T1195]
    [ 79.645682][ T1195] rcu_scheduler_active = 2, debug_locks = 1
    [ 79.646980][ T1195] 2 locks held by ip/1195:
    [ 79.647629][ T1195] #0: ffffffffa3cf64f0 (rtnl_mutex){+.+.}, at: rtnetlink_rcv_msg+0x457/0x890
    [ 79.649312][ T1195] #1: ffffffffa39256c0 (rcu_read_lock){....}, at: rmnet_config_notify_cb+0xf0/0x590 [rmnet]
    [ 79.651717][ T1195]
    [ 79.651717][ T1195] stack backtrace:
    [ 79.652650][ T1195] CPU: 3 PID: 1195 Comm: ip Not tainted 5.6.0-rc1+ #447
    [ 79.653702][ T1195] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 79.655037][ T1195] Call Trace:
    [ 79.655560][ T1195] dump_stack+0x96/0xdb
    [ 79.656252][ T1195] ___might_sleep+0x345/0x440
    [ 79.656994][ T1195] synchronize_net+0x18/0x30
    [ 79.661132][ T1195] netdev_rx_handler_unregister+0x40/0xb0
    [ 79.666266][ T1195] rmnet_unregister_real_device+0x42/0xb0 [rmnet]
    [ 79.667211][ T1195] rmnet_config_notify_cb+0x1f7/0x590 [rmnet]
    [ 79.668121][ T1195] ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [ 79.669166][ T1195] ? rmnet_unregister_bridge.isra.6+0xf0/0xf0 [rmnet]
    [ 79.670286][ T1195] ? __module_text_address+0x13/0x140
    [ 79.671139][ T1195] notifier_call_chain+0x90/0x160
    [ 79.671973][ T1195] rollback_registered_many+0x660/0xcf0
    [ 79.672893][ T1195] ? netif_set_real_num_tx_queues+0x780/0x780
    [ 79.675091][ T1195] ? __lock_acquire+0xdfe/0x3de0
    [ 79.675825][ T1195] ? memset+0x1f/0x40
    [ 79.676367][ T1195] ? __nla_validate_parse+0x98/0x1ab0
    [ 79.677290][ T1195] unregister_netdevice_many.part.133+0x13/0x1b0
    [ 79.678163][ T1195] rtnl_delete_link+0xbc/0x100
    [ ... ]

    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • rmnet_get_port() internally calls rcu_dereference_rtnl(),
    which checks RTNL.
    But rmnet_get_port() could be called by packet path.
    The packet path is not protected by RTNL.
    So, the suspicious RCU usage problem occurs.

    Test commands:
    modprobe rmnet
    ip netns add nst
    ip link add veth0 type veth peer name veth1
    ip link set veth1 netns nst
    ip link add rmnet0 link veth0 type rmnet mux_id 1
    ip netns exec nst ip link add rmnet1 link veth1 type rmnet mux_id 1
    ip netns exec nst ip link set veth1 up
    ip netns exec nst ip link set rmnet1 up
    ip netns exec nst ip a a 192.168.100.2/24 dev rmnet1
    ip link set veth0 up
    ip link set rmnet0 up
    ip a a 192.168.100.1/24 dev rmnet0
    ping 192.168.100.2

    Splat looks like:
    [ 146.630958][ T1174] WARNING: suspicious RCU usage
    [ 146.631735][ T1174] 5.6.0-rc1+ #447 Not tainted
    [ 146.632387][ T1174] -----------------------------
    [ 146.633151][ T1174] drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c:386 suspicious rcu_dereference_check() !
    [ 146.634742][ T1174]
    [ 146.634742][ T1174] other info that might help us debug this:
    [ 146.634742][ T1174]
    [ 146.645992][ T1174]
    [ 146.645992][ T1174] rcu_scheduler_active = 2, debug_locks = 1
    [ 146.646937][ T1174] 5 locks held by ping/1174:
    [ 146.647609][ T1174] #0: ffff8880c31dea70 (sk_lock-AF_INET){+.+.}, at: raw_sendmsg+0xab8/0x2980
    [ 146.662463][ T1174] #1: ffffffff93925660 (rcu_read_lock_bh){....}, at: ip_finish_output2+0x243/0x2150
    [ 146.671696][ T1174] #2: ffffffff93925660 (rcu_read_lock_bh){....}, at: __dev_queue_xmit+0x213/0x2940
    [ 146.673064][ T1174] #3: ffff8880c19ecd58 (&dev->qdisc_running_key#7){+...}, at: ip_finish_output2+0x714/0x2150
    [ 146.690358][ T1174] #4: ffff8880c5796898 (&dev->qdisc_xmit_lock_key#3){+.-.}, at: sch_direct_xmit+0x1e2/0x1020
    [ 146.699875][ T1174]
    [ 146.699875][ T1174] stack backtrace:
    [ 146.701091][ T1174] CPU: 0 PID: 1174 Comm: ping Not tainted 5.6.0-rc1+ #447
    [ 146.705215][ T1174] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 146.706565][ T1174] Call Trace:
    [ 146.707102][ T1174] dump_stack+0x96/0xdb
    [ 146.708007][ T1174] rmnet_get_port.part.9+0x76/0x80 [rmnet]
    [ 146.709233][ T1174] rmnet_egress_handler+0x107/0x420 [rmnet]
    [ 146.710492][ T1174] ? sch_direct_xmit+0x1e2/0x1020
    [ 146.716193][ T1174] rmnet_vnd_start_xmit+0x3d/0xa0 [rmnet]
    [ 146.717012][ T1174] dev_hard_start_xmit+0x160/0x740
    [ 146.717854][ T1174] sch_direct_xmit+0x265/0x1020
    [ 146.718577][ T1174] ? register_lock_class+0x14d0/0x14d0
    [ 146.719429][ T1174] ? dev_watchdog+0xac0/0xac0
    [ 146.723738][ T1174] ? __dev_queue_xmit+0x15fd/0x2940
    [ 146.724469][ T1174] ? lock_acquire+0x164/0x3b0
    [ 146.725172][ T1174] __dev_queue_xmit+0x20c7/0x2940
    [ ... ]

    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • In the rmnet_changelink(), it uses IFLA_LINK without checking
    NULL pointer.
    tb[IFLA_LINK] could be NULL pointer.
    So, NULL-ptr-deref could occur.

    rmnet already has a lower interface (real_dev).
    So, after this patch, rmnet_changelink() does not use IFLA_LINK anymore.

    Test commands:
    modprobe rmnet
    ip link add dummy0 type dummy
    ip link add rmnet0 link dummy0 type rmnet mux_id 1
    ip link set rmnet0 type rmnet mux_id 2

    Splat looks like:
    [ 90.578726][ T1131] general protection fault, probably for non-canonical address 0xdffffc0000000000I
    [ 90.581121][ T1131] KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    [ 90.582380][ T1131] CPU: 2 PID: 1131 Comm: ip Not tainted 5.6.0-rc1+ #447
    [ 90.584285][ T1131] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 90.587506][ T1131] RIP: 0010:rmnet_changelink+0x5a/0x8a0 [rmnet]
    [ 90.588546][ T1131] Code: 83 ec 20 48 c1 ea 03 80 3c 02 00 0f 85 6f 07 00 00 48 8b 5e 28 48 b8 00 00 00 00 00 0
    [ 90.591447][ T1131] RSP: 0018:ffff8880ce78f1b8 EFLAGS: 00010247
    [ 90.592329][ T1131] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffff8880ce78f8b0
    [ 90.593253][ T1131] RDX: 0000000000000000 RSI: ffff8880ce78f4a0 RDI: 0000000000000004
    [ 90.594058][ T1131] RBP: ffff8880cf543e00 R08: 0000000000000002 R09: 0000000000000002
    [ 90.594859][ T1131] R10: ffffffffc0586a40 R11: 0000000000000000 R12: ffff8880ca47c000
    [ 90.595690][ T1131] R13: ffff8880ca47c000 R14: ffff8880cf545000 R15: 0000000000000000
    [ 90.596553][ T1131] FS: 00007f21f6c7e0c0(0000) GS:ffff8880da400000(0000) knlGS:0000000000000000
    [ 90.597504][ T1131] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 90.599418][ T1131] CR2: 0000556e413db458 CR3: 00000000c917a002 CR4: 00000000000606e0
    [ 90.600289][ T1131] Call Trace:
    [ 90.600631][ T1131] __rtnl_newlink+0x922/0x1270
    [ 90.601194][ T1131] ? lock_downgrade+0x6e0/0x6e0
    [ 90.601724][ T1131] ? rtnl_link_unregister+0x220/0x220
    [ 90.602309][ T1131] ? lock_acquire+0x164/0x3b0
    [ 90.602784][ T1131] ? is_bpf_image_address+0xff/0x1d0
    [ 90.603331][ T1131] ? rtnl_newlink+0x4c/0x90
    [ 90.603810][ T1131] ? kernel_text_address+0x111/0x140
    [ 90.604419][ T1131] ? __kernel_text_address+0xe/0x30
    [ 90.604981][ T1131] ? unwind_get_return_address+0x5f/0xa0
    [ 90.605616][ T1131] ? create_prof_cpu_mask+0x20/0x20
    [ 90.606304][ T1131] ? arch_stack_walk+0x83/0xb0
    [ 90.606985][ T1131] ? stack_trace_save+0x82/0xb0
    [ 90.607656][ T1131] ? stack_trace_consume_entry+0x160/0x160
    [ 90.608503][ T1131] ? deactivate_slab.isra.78+0x2c5/0x800
    [ 90.609336][ T1131] ? kasan_unpoison_shadow+0x30/0x40
    [ 90.610096][ T1131] ? kmem_cache_alloc_trace+0x135/0x350
    [ 90.610889][ T1131] ? rtnl_newlink+0x4c/0x90
    [ 90.611512][ T1131] rtnl_newlink+0x65/0x90
    [ ... ]

    Fixes: 23790ef12082 ("net: qualcomm: rmnet: Allow to configure flags for existing devices")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • rmnet registers IFLA_LINK interface as a lower interface.
    But, IFLA_LINK could be NULL.
    In the current code, rmnet doesn't check IFLA_LINK.
    So, panic would occur.

    Test commands:
    modprobe rmnet
    ip link add rmnet0 type rmnet mux_id 1

    Splat looks like:
    [ 36.826109][ T1115] general protection fault, probably for non-canonical address 0xdffffc0000000000I
    [ 36.838817][ T1115] KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    [ 36.839908][ T1115] CPU: 1 PID: 1115 Comm: ip Not tainted 5.6.0-rc1+ #447
    [ 36.840569][ T1115] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [ 36.841408][ T1115] RIP: 0010:rmnet_newlink+0x54/0x510 [rmnet]
    [ 36.841986][ T1115] Code: 83 ec 18 48 c1 e9 03 80 3c 01 00 0f 85 d4 03 00 00 48 8b 6a 28 48 b8 00 00 00 00 00 c
    [ 36.843923][ T1115] RSP: 0018:ffff8880b7e0f1c0 EFLAGS: 00010247
    [ 36.844756][ T1115] RAX: dffffc0000000000 RBX: ffff8880d14cca00 RCX: 1ffff11016fc1e99
    [ 36.845859][ T1115] RDX: 0000000000000000 RSI: ffff8880c3d04000 RDI: 0000000000000004
    [ 36.846961][ T1115] RBP: 0000000000000000 R08: ffff8880b7e0f8b0 R09: ffff8880b6ac2d90
    [ 36.848020][ T1115] R10: ffffffffc0589a40 R11: ffffed1016d585b7 R12: ffffffff88ceaf80
    [ 36.848788][ T1115] R13: ffff8880c3d04000 R14: ffff8880b7e0f8b0 R15: ffff8880c3d04000
    [ 36.849546][ T1115] FS: 00007f50ab3360c0(0000) GS:ffff8880da000000(0000) knlGS:0000000000000000
    [ 36.851784][ T1115] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 36.852422][ T1115] CR2: 000055871afe5ab0 CR3: 00000000ae246001 CR4: 00000000000606e0
    [ 36.853181][ T1115] Call Trace:
    [ 36.853514][ T1115] __rtnl_newlink+0xbdb/0x1270
    [ 36.853967][ T1115] ? lock_downgrade+0x6e0/0x6e0
    [ 36.854420][ T1115] ? rtnl_link_unregister+0x220/0x220
    [ 36.854936][ T1115] ? lock_acquire+0x164/0x3b0
    [ 36.855376][ T1115] ? is_bpf_image_address+0xff/0x1d0
    [ 36.855884][ T1115] ? rtnl_newlink+0x4c/0x90
    [ 36.856304][ T1115] ? kernel_text_address+0x111/0x140
    [ 36.856857][ T1115] ? __kernel_text_address+0xe/0x30
    [ 36.857440][ T1115] ? unwind_get_return_address+0x5f/0xa0
    [ 36.858063][ T1115] ? create_prof_cpu_mask+0x20/0x20
    [ 36.858644][ T1115] ? arch_stack_walk+0x83/0xb0
    [ 36.859171][ T1115] ? stack_trace_save+0x82/0xb0
    [ 36.859710][ T1115] ? stack_trace_consume_entry+0x160/0x160
    [ 36.860357][ T1115] ? deactivate_slab.isra.78+0x2c5/0x800
    [ 36.860928][ T1115] ? kasan_unpoison_shadow+0x30/0x40
    [ 36.861520][ T1115] ? kmem_cache_alloc_trace+0x135/0x350
    [ 36.862125][ T1115] ? rtnl_newlink+0x4c/0x90
    [ 36.864073][ T1115] rtnl_newlink+0x65/0x90
    [ ... ]

    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Signed-off-by: Taehee Yoo
    Signed-off-by: David S. Miller

    Taehee Yoo
     
  • …/masahiroy/linux-kbuild

    Pull Kbuild fixes from Masahiro Yamada:

    - fix missed rebuild of DT schema check

    - add some phony targets to PHONY

    - fix comments and documents

    * tag 'kbuild-fixes-v5.6-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    kbuild: get rid of trailing slash from subdir- example
    kbuild: add dt_binding_check to PHONY in a correct place
    kbuild: add dtbs_check to PHONY
    kbuild: remove unneeded semicolon at the end of cmd_dtb_check
    kbuild: fix DT binding schema rule to detect command line changes
    kbuild: remove wrong documentation about mandatory-y
    kbuild: add comment for V=2 mode

    Linus Torvalds
     
  • Don't attempt to interpret the PHY specific status register unless
    the PHY is indicating that the resolution is valid.

    Reviewed-by: Andrew Lunn
    Signed-off-by: Russell King
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Russell King
     
  • The current code causes problems when the unregistering netdevice could
    be different then the registering one.

    Since the check in mlx5_lag_netdev_event() does not allow any other
    network namespace anyway, fix this by registerting the lag notifier
    per init network namespace only.

    Fixes: d48834f9d4b4 ("mlx5: Use dev_net netdevice notifier registrations")
    Signed-off-by: Jiri Pirko
    Tested-by: Aya Levin
    Acked-by: Saeed Mahameed
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Pull HID subsystem fixes from Jiri Kosina:

    - syzkaller-reported error handling fixes in various drivers, from
    various people

    - increase of HID report buffer size to 8K, which is apparently needed
    by certain modern devices

    - a few new device-ID-specific fixes / quirks

    - battery charging status reporting fix in logitech-hidpp, from Filipe
    Laíns

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
    HID: hid-bigbenff: fix race condition for scheduled work during removal
    HID: hid-bigbenff: call hid_hw_stop() in case of error
    HID: hid-bigbenff: fix general protection fault caused by double kfree
    HID: i2c-hid: add Trekstor Surfbook E11B to descriptor override
    HID: alps: Fix an error handling path in 'alps_input_configured()'
    HID: hiddev: Fix race in in hiddev_disconnect()
    HID: core: increase HID report buffer size to 8KiB
    HID: core: fix off-by-one memset in hid_report_raw_event()
    HID: apple: Add support for recent firmware on Magic Keyboards
    HID: ite: Only bind to keyboard USB interface on Acer SW5-012 keyboard dock
    HID: logitech-hidpp: BatteryVoltage: only read chargeStatus if extPower is active

    Linus Torvalds
     
  • Follow the pattern used with other *_show_fdinfo functions and only
    define unix_show_fdinfo and set it in proto_ops if CONFIG_PROCFS
    is set.

    Fixes: 3c32da19a858 ("unix: Show number of pending scm files of receive queue in fdinfo")
    Signed-off-by: Tobias Klauser
    Reviewed-by: Kirill Tkhai
    Signed-off-by: David S. Miller

    Tobias Klauser
     
  • Luo bin says:

    ====================
    hinic: BugFixes

    the bug fixed in patch #2 has been present since the first commit.
    the bugs fixed in patch #1 and patch #3 have been present since the
    following commits:
    patch #1: 352f58b0d9f2 ("net-next/hinic: Set Rxq irq to specific cpu for NUMA")
    patch #3: 421e9526288b ("hinic: add rss support")
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • should use real receive queue number to configure hw rss
    indirect table rather than maximal queue number

    Signed-off-by: Luo bin
    Signed-off-by: David S. Miller

    Luo bin
     
  • a reserved field is used to signify prime physical function index
    in the latest firmware version, so we must assign a value to it
    correctly

    Signed-off-by: Luo bin
    Signed-off-by: David S. Miller

    Luo bin
     
  • can not use a local variable as an input parameter of
    irq_set_affinity_hint

    Signed-off-by: Luo bin
    Signed-off-by: David S. Miller

    Luo bin
     
  • Pull documentation fixes from Jonathan Corbet:
    "A pair of docs-build fixes"

    * tag 'docs-5.6-fixes' of git://git.lwn.net/linux:
    docs: Fix empty parallelism argument
    docs: remove MPX from the x86 toc

    Linus Torvalds
     
  • Pull audit fixes from Paul Moore:
    "Two fixes for problems found by syzbot:

    - Moving audit filter structure fields into a union caused some
    problems in the code which populates that filter structure.

    We keep the union (that idea is a good one), but we are fixing the
    code so that it doesn't needlessly set fields in the union and mess
    up the error handling.

    - The audit_receive_msg() function wasn't validating user input as
    well as it should in all cases, we add the necessary checks"

    * tag 'audit-pr-20200226' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit:
    audit: always check the netlink payload length in audit_receive_msg()
    audit: fix error handling in audit_data_to_entry()

    Linus Torvalds
     

27 Feb, 2020

2 commits

  • In smc_ib_remove_dev() check if the provided ib device was actually
    initialized for SMC before.

    Reported-by: syzbot+84484ccebdd4e5451d91@syzkaller.appspotmail.com
    Fixes: a4cf0443c414 ("smc: introduce SMC as an IB-client")
    Signed-off-by: Karsten Graul
    Signed-off-by: David S. Miller

    Karsten Graul
     
  • We cannot register the same netdev notifier multiple times when probing
    stmmac devices. Register the notifier only once in module init, and also
    make debugfs creation/deletion safe against simultaneous notifier call.

    Fixes: 481a7d154cbb ("stmmac: debugfs entry name is not be changed when udev rename device name.")
    Signed-off-by: Aaro Koskinen
    Signed-off-by: David S. Miller

    Aaro Koskinen