06 Sep, 2018

4 commits

  • When sending an skb, afiucv_hs_send() bails out on various error
    conditions. But currently the caller has no way of telling whether the
    skb was freed or not - resulting in potentially either
    a) leaked skbs from iucv_send_ctrl(), or
    b) double-free's from iucv_sock_sendmsg().

    As dev_queue_xmit() will always consume the skb (even on error), be
    consistent and also free the skb from all other error paths. This way
    callers no longer need to care about managing the skb.

    Signed-off-by: Julian Wiedmann
    Reviewed-by: Ursula Braun
    Signed-off-by: David S. Miller

    Julian Wiedmann
     
  • Inbound packets may have any combination of flag bits set in their iucv
    header. If we don't know how to handle a specific combination, drop the
    skb instead of leaking it.

    To clarify what error is returned in this case, replace the hard-coded
    0 with the corresponding macro.

    Signed-off-by: Julian Wiedmann
    Signed-off-by: David S. Miller

    Julian Wiedmann
     
  • If users try to install act_tunnel_key 'set' rules with duplicate values
    of 'index', the tunnel metadata are allocated, but never released. Then,
    kmemleak complains as follows:

    # tc a a a tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 index 111
    # echo clear > /sys/kernel/debug/kmemleak
    # tc a a a tunnel_key set src_ip 1.1.1.1 dst_ip 2.2.2.2 id 42 index 111
    Error: TC IDR already exists.
    We have an error talking to the kernel
    # echo scan > /sys/kernel/debug/kmemleak
    # cat /sys/kernel/debug/kmemleak
    unreferenced object 0xffff8800574e6c80 (size 256):
    comm "tc", pid 5617, jiffies 4298118009 (age 57.990s)
    hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 1c e8 b0 ff ff ff ff ................
    81 24 c2 ad ff ff ff ff 00 00 00 00 00 00 00 00 .$..............
    backtrace:
    [] tunnel_key_init+0x8a5/0x1800 [act_tunnel_key]
    [] tcf_action_init_1+0x698/0xac0
    [] tcf_action_init+0x15c/0x590
    [] tc_ctl_action+0x336/0x5c2
    [] rtnetlink_rcv_msg+0x357/0x8e0
    [] netlink_rcv_skb+0x124/0x350
    [] netlink_unicast+0x40f/0x5d0
    [] netlink_sendmsg+0x6e8/0xba0
    [] sock_sendmsg+0xb3/0xf0
    [] ___sys_sendmsg+0x654/0x960
    [] __sys_sendmsg+0xd3/0x170
    [] do_syscall_64+0xa5/0x470
    [] entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [] 0xffffffffffffffff

    This problem theoretically happens also in case users attempt to setup a
    geneve rule having wrong configuration data, or when the kernel fails to
    allocate 'params_new'. Ensure that tunnel_key_init() releases the tunnel
    metadata also in the above conditions.

    Addresses-Coverity-ID: 1373974 ("Resource leak")
    Fixes: d0f6dd8a914f4 ("net/sched: Introduce act_tunnel_key")
    Fixes: 0ed5269f9e41f ("net/sched: add tunnel option support to act_tunnel_key")
    Signed-off-by: Davide Caratti
    Acked-by: Cong Wang
    Signed-off-by: David S. Miller

    Davide Caratti
     
  • Before we unlock the sock in tipc_release(), we have to
    detach sk->sk_socket from sk, otherwise a parallel
    tipc_sk_fill_sock_diag() could stil read it after we
    free this socket.

    Fixes: c30b70deb5f4 ("tipc: implement socket diagnostics for AF_TIPC")
    Reported-and-tested-by: syzbot+48804b87c16588ad491d@syzkaller.appspotmail.com
    Cc: Jon Maloy
    Cc: Ying Xue
    Signed-off-by: Cong Wang
    Acked-by: Ying Xue
    Signed-off-by: David S. Miller

    Cong Wang
     

05 Sep, 2018

8 commits

  • With performance optimization the spi transfer and messages of basic
    register operations like qcaspi_read_register moved into the private
    driver structure. But they weren't protected against mutual access
    (e.g. between driver kthread and ethtool). So dumping the QCA7000
    registers via ethtool during network traffic could make spi_sync
    hang forever, because the completion in spi_message is overwritten.

    So revert the optimization completely.

    Fixes: 291ab06ecf676 ("net: qualcomm: new Ethernet over SPI driver for QCA700")
    Signed-off-by: Stefan Wahren
    Signed-off-by: David S. Miller

    Stefan Wahren
     
  • DMA allocated memory is lost in be_cmd_get_profile_config() when we
    call it with non-NULL port_res parameter.

    Signed-off-by: Petr Oros
    Reviewed-by: Ivan Vecera
    Signed-off-by: David S. Miller

    Petr Oros
     
  • MC-aware mode was recently enabled by mlxsw on Spectrum switches in
    commit 7b8195306694 ("mlxsw: spectrum: Configure MC-aware mode on mlxsw
    ports"). Unfortunately, testing has shown that the fix is incomplete and
    in the presented form actually makes the problem even worse, because any
    amount of MC traffic causes UC disruption.

    The reason for this is that currently, mlxsw configures the MC-specific
    TCs (8..15) to map to pool 0. It also configures a maximum buffer size
    of 0, but for MC traffic that maximum is disregarded and not part of the
    quota. Therefore MC traffic is always admitted to the egress buffer.

    Fix the configuration by directing the MC TCs into pool 15, which is
    dedicated to MC traffic and recognized as such by the silicon.

    Fixes: 7b8195306694 ("mlxsw: spectrum: Configure MC-aware mode on mlxsw ports")
    Signed-off-by: Petr Machata
    Acked-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Petr Machata
     
  • Pull networking fixes from David Miller:

    1) Must perform TXQ teardown before unregistering interfaces in
    mac80211, from Toke Høiland-Jørgensen.

    2) Don't allow creating mac80211_hwsim with less than one channel, from
    Johannes Berg.

    3) Division by zero in cfg80211, fix from Johannes Berg.

    4) Fix endian issue in tipc, from Haiqing Bai.

    5) BPF sockmap use-after-free fixes from Daniel Borkmann.

    6) Spectre-v1 in mac80211_hwsim, from Jinbum Park.

    7) Missing rhashtable_walk_exit() in tipc, from Cong Wang.

    8) Revert kvzalloc() conversion of AF_PACKET, it breaks mmap() when
    kvzalloc() tries to use kmalloc() pages. From Eric Dumazet.

    9) Fix deadlock in hv_netvsc, from Dexuan Cui.

    10) Do not restart timewait timer on RST, from Florian Westphal.

    11) Fix double lwstate refcount grab in ipv6, from Alexey Kodanev.

    12) Unsolicit report count handling is off-by-one, fix from Hangbin Liu.

    13) Sleep-in-atomic in cadence driver, from Jia-Ju Bai.

    14) Respect ttl-inherit in ip6 tunnel driver, from Hangbin Liu.

    15) Use-after-free in act_ife, fix from Cong Wang.

    16) Missing hold to meta module in act_ife, from Vlad Buslov.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (91 commits)
    net: phy: sfp: Handle unimplemented hwmon limits and alarms
    net: sched: action_ife: take reference to meta module
    act_ife: fix a potential use-after-free
    net/mlx5: Fix SQ offset in QPs with small RQ
    tipc: correct spelling errors for tipc_topsrv_queue_evt() comments
    tipc: correct spelling errors for struct tipc_bc_base's comment
    bnxt_en: Do not adjust max_cp_rings by the ones used by RDMA.
    bnxt_en: Clean up unused functions.
    bnxt_en: Fix firmware signaled resource change logic in open.
    sctp: not traverse asoc trans list if non-ipv6 trans exists for ipv6_flowlabel
    sctp: fix invalid reference to the index variable of the iterator
    net/ibm/emac: wrong emac_calc_base call was used by typo
    net: sched: null actions array pointer before releasing action
    vhost: fix VHOST_GET_BACKEND_FEATURES ioctl request definition
    r8169: add support for NCube 8168 network card
    ip6_tunnel: respect ttl inherit for ip6tnl
    mac80211: shorten the IBSS debug messages
    mac80211: don't Tx a deauth frame if the AP forbade Tx
    mac80211: Fix station bandwidth setting after channel switch
    mac80211: fix a race between restart and CSA flows
    ...

    Linus Torvalds
     
  • Not all SFPs implement the registers containing sensor limits and
    alarms. Luckily, there is a bit indicating if they are implemented or
    not. Add checking for this bit, when deciding if the hwmon attributes
    should be visible.

    Fixes: 1323061a018a ("net: phy: sfp: Add HWMON support for module sensors")
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • Recent refactoring of add_metainfo() caused use_all_metadata() to add
    metainfo to ife action metalist without taking reference to module. This
    causes warning in module_put called from ife action cleanup function.

    Implement add_metainfo_and_get_ops() function that returns with reference
    to module taken if metainfo was added successfully, and call it from
    use_all_metadata(), instead of calling __add_metainfo() directly.

    Example warning:

    [ 646.344393] WARNING: CPU: 1 PID: 2278 at kernel/module.c:1139 module_put+0x1cb/0x230
    [ 646.352437] Modules linked in: act_meta_skbtcindex act_meta_mark act_meta_skbprio act_ife ife veth nfsv3 nfs fscache xt_CHECKSUM iptable_mangle ipt_MASQUERADE iptable_nat nf_nat_ipv4 nf_nat xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c tun ebtable_filter ebtables ip6table_filter ip6_tables bridge stp llc mlx5_ib ib_uverbs ib_core intel_rapl sb_edac x86_pkg_temp_thermal mlx5_core coretemp kvm_intel kvm nfsd igb irqbypass crct10dif_pclmul devlink crc32_pclmul mei_me joydev ses crc32c_intel enclosure auth_rpcgss i2c_algo_bit ioatdma ptp mei pps_core ghash_clmulni_intel iTCO_wdt iTCO_vendor_support pcspkr dca ipmi_ssif lpc_ich target_core_mod i2c_i801 ipmi_si ipmi_devintf pcc_cpufreq wmi ipmi_msghandler nfs_acl lockd acpi_pad acpi_power_meter grace sunrpc mpt3sas raid_class scsi_transport_sas
    [ 646.425631] CPU: 1 PID: 2278 Comm: tc Not tainted 4.19.0-rc1+ #799
    [ 646.432187] Hardware name: Supermicro SYS-2028TP-DECR/X10DRT-P, BIOS 2.0b 03/30/2017
    [ 646.440595] RIP: 0010:module_put+0x1cb/0x230
    [ 646.445238] Code: f3 66 94 02 e8 26 ff fa ff 85 c0 74 11 0f b6 1d 51 30 94 02 80 fb 01 77 60 83 e3 01 74 13 65 ff 0d 3a 83 db 73 e9 2b ff ff ff 0b e9 00 ff ff ff e8 59 01 fb ff 85 c0 75 e4 48 c7 c2 20 62 6b
    [ 646.464997] RSP: 0018:ffff880354d37068 EFLAGS: 00010286
    [ 646.470599] RAX: 0000000000000000 RBX: ffffffffc0a52518 RCX: ffffffff8c2668db
    [ 646.478118] RDX: 0000000000000003 RSI: dffffc0000000000 RDI: ffffffffc0a52518
    [ 646.485641] RBP: ffffffffc0a52180 R08: fffffbfff814a4a4 R09: fffffbfff814a4a3
    [ 646.493164] R10: ffffffffc0a5251b R11: fffffbfff814a4a4 R12: 1ffff1006a9a6e0d
    [ 646.500687] R13: 00000000ffffffff R14: ffff880362bab890 R15: dead000000000100
    [ 646.508213] FS: 00007f4164c99800(0000) GS:ffff88036fe40000(0000) knlGS:0000000000000000
    [ 646.516961] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 646.523080] CR2: 00007f41638b8420 CR3: 0000000351df0004 CR4: 00000000001606e0
    [ 646.530595] Call Trace:
    [ 646.533408] ? find_symbol_in_section+0x260/0x260
    [ 646.538509] tcf_ife_cleanup+0x11b/0x200 [act_ife]
    [ 646.543695] tcf_action_cleanup+0x29/0xa0
    [ 646.548078] __tcf_action_put+0x5a/0xb0
    [ 646.552289] ? nla_put+0x65/0xe0
    [ 646.555889] __tcf_idr_release+0x48/0x60
    [ 646.560187] tcf_generic_walker+0x448/0x6b0
    [ 646.564764] ? tcf_action_dump_1+0x450/0x450
    [ 646.569411] ? __lock_is_held+0x84/0x110
    [ 646.573720] ? tcf_ife_walker+0x10c/0x20f [act_ife]
    [ 646.578982] tca_action_gd+0x972/0xc40
    [ 646.583129] ? tca_get_fill.constprop.17+0x250/0x250
    [ 646.588471] ? mark_lock+0xcf/0x980
    [ 646.592324] ? check_chain_key+0x140/0x1f0
    [ 646.596832] ? debug_show_all_locks+0x240/0x240
    [ 646.601839] ? memset+0x1f/0x40
    [ 646.605350] ? nla_parse+0xca/0x1a0
    [ 646.609217] tc_ctl_action+0x215/0x230
    [ 646.613339] ? tcf_action_add+0x220/0x220
    [ 646.617748] rtnetlink_rcv_msg+0x56a/0x6d0
    [ 646.622227] ? rtnl_fdb_del+0x3f0/0x3f0
    [ 646.626466] netlink_rcv_skb+0x18d/0x200
    [ 646.630752] ? rtnl_fdb_del+0x3f0/0x3f0
    [ 646.634959] ? netlink_ack+0x500/0x500
    [ 646.639106] netlink_unicast+0x2d0/0x370
    [ 646.643409] ? netlink_attachskb+0x340/0x340
    [ 646.648050] ? _copy_from_iter_full+0xe9/0x3e0
    [ 646.652870] ? import_iovec+0x11e/0x1c0
    [ 646.657083] netlink_sendmsg+0x3b9/0x6a0
    [ 646.661388] ? netlink_unicast+0x370/0x370
    [ 646.665877] ? netlink_unicast+0x370/0x370
    [ 646.670351] sock_sendmsg+0x6b/0x80
    [ 646.674212] ___sys_sendmsg+0x4a1/0x520
    [ 646.678443] ? copy_msghdr_from_user+0x210/0x210
    [ 646.683463] ? lock_downgrade+0x320/0x320
    [ 646.687849] ? debug_show_all_locks+0x240/0x240
    [ 646.692760] ? do_raw_spin_unlock+0xa2/0x130
    [ 646.697418] ? _raw_spin_unlock+0x24/0x30
    [ 646.701798] ? __handle_mm_fault+0x1819/0x1c10
    [ 646.706619] ? __pmd_alloc+0x320/0x320
    [ 646.710738] ? debug_show_all_locks+0x240/0x240
    [ 646.715649] ? restore_nameidata+0x7b/0xa0
    [ 646.720117] ? check_chain_key+0x140/0x1f0
    [ 646.724590] ? check_chain_key+0x140/0x1f0
    [ 646.729070] ? __fget_light+0xbc/0xd0
    [ 646.733121] ? __sys_sendmsg+0xd7/0x150
    [ 646.737329] __sys_sendmsg+0xd7/0x150
    [ 646.741359] ? __ia32_sys_shutdown+0x30/0x30
    [ 646.746003] ? up_read+0x53/0x90
    [ 646.749601] ? __do_page_fault+0x484/0x780
    [ 646.754105] ? do_syscall_64+0x1e/0x2c0
    [ 646.758320] do_syscall_64+0x72/0x2c0
    [ 646.762353] entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [ 646.767776] RIP: 0033:0x7f4163872150
    [ 646.771713] Code: 8b 15 3c 7d 2b 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb cd 66 0f 1f 44 00 00 83 3d b9 d5 2b 00 00 75 10 b8 2e 00 00 00 0f 05 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 be cd 00 00 48 89 04 24
    [ 646.791474] RSP: 002b:00007ffdef7d6b58 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    [ 646.799721] RAX: ffffffffffffffda RBX: 0000000000000024 RCX: 00007f4163872150
    [ 646.807240] RDX: 0000000000000000 RSI: 00007ffdef7d6bd0 RDI: 0000000000000003
    [ 646.814760] RBP: 000000005b8b9482 R08: 0000000000000001 R09: 0000000000000000
    [ 646.822286] R10: 00000000000005e7 R11: 0000000000000246 R12: 00007ffdef7dad20
    [ 646.829807] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000679bc0
    [ 646.837360] irq event stamp: 6083
    [ 646.841043] hardirqs last enabled at (6081): [] __call_rcu+0x17d/0x500
    [ 646.849882] hardirqs last disabled at (6083): [] trace_hardirqs_off_thunk+0x1a/0x1c
    [ 646.859775] softirqs last enabled at (5968): [] __do_softirq+0x4a1/0x6ee
    [ 646.868784] softirqs last disabled at (6082): [] tcf_ife_cleanup+0x39/0x200 [act_ife]
    [ 646.878845] ---[ end trace b1b8c12ffe51e657 ]---

    Fixes: 5ffe57da29b3 ("act_ife: fix a potential deadlock")
    Signed-off-by: Vlad Buslov
    Acked-by: Cong Wang
    Signed-off-by: David S. Miller

    Vlad Buslov
     
  • Immediately after module_put(), user could delete this
    module, so e->ops could be already freed before we call
    e->ops->release().

    Fix this by moving module_put() after ops->release().

    Fixes: ef6980b6becb ("introduce IFE action")
    Cc: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     
  • Correct the formula for calculating the RQ page remainder,
    which should be in byte granularity. The result will be
    non-zero only for RQs smaller than PAGE_SIZE, as an RQ size
    is a power of 2.

    Divide this by the SQ stride (MLX5_SEND_WQE_BB) to get the
    SQ offset in strides granularity.

    Fixes: d7037ad73daa ("net/mlx5: Fix QP fragmented buffer allocation")
    Signed-off-by: Tariq Toukan
    Reviewed-by: Eran Ben Elisha
    Signed-off-by: Saeed Mahameed
    Signed-off-by: David S. Miller

    Tariq Toukan
     

04 Sep, 2018

15 commits

  • …kernel/git/jberg/mac80211

    Johannes Berg says:

    ====================
    Here are quite a large number of fixes, notably:
    * various A-MSDU building fixes (currently only affects mt76)
    * syzkaller & spectre fixes in hwsim
    * TXQ vs. teardown fix that was causing crashes
    * embed WMM info in reg rule, bad code here had been causing crashes
    * one compilation issue with fix from Arnd (rfkill-gpio includes)
    * fixes for a race and bad data during/after channel switch
    * nl80211: a validation fix, attribute type & unit fixes
    along with other small fixes.
    ====================

    Signed-off-by: David S. Miller <davem@davemloft.net>

    David S. Miller
     
  • tipc_conn_queue_evt -> tipc_topsrv_queue_evt
    tipc_send_work -> tipc_conn_send_work
    tipc_send_to_sock -> tipc_conn_send_to_sock

    Signed-off-by: Zhenbo Gao
    Reviewed-by: Ying Xue
    Signed-off-by: David S. Miller

    Zhenbo Gao
     
  • Trivial fix for two spelling mistakes.

    Signed-off-by: Zhenbo Gao
    Reviewed-by: Ying Xue
    Signed-off-by: David S. Miller

    Zhenbo Gao
     
  • Michael Chan says:

    ====================
    bnxt_en: Bug fixes.

    This short series fixes resource related logic in the driver, mostly
    affecting the RDMA driver under corner cases.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Currently, the driver adjusts the bp->hw_resc.max_cp_rings by the number
    of MSIX vectors used by RDMA. There is one code path in open that needs
    to check the true max_cp_rings including any used by RDMA. This code
    is now checking for the reduced max_cp_rings which will fail when the
    number of cp rings is very small.

    To fix this in a clean way, we don't adjust max_cp_rings anymore.
    Instead, we add a helper bnxt_get_max_func_cp_rings_for_en() to get the
    reduced max_cp_rings when appropriate.

    Fixes: ec86f14ea506 ("bnxt_en: Add ULP calls to stop and restart IRQs.")
    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • Remove unused bnxt_subtract_ulp_resources(). Change
    bnxt_get_max_func_irqs() to static since it is only locally used.

    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • When the driver detects that resources have changed during open, it
    should reset the rx and tx rings to 0. This will properly setup the
    init sequence to initialize the default rings again. We also need
    to signal the RDMA driver to stop and clear its interrupts. We then
    call the RoCE driver to restart if a new set of default rings is
    successfully reserved.

    Fixes: 25e1acd6b92b ("bnxt_en: Notify firmware about IF state changes.")
    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Michael Chan
     
  • Xin Long says:

    ====================
    sctp: two fixes for spp_ipv6_flowlabel and spp_dscp sockopts

    This patchset fixes two problems in sctp_apply_peer_addr_params()
    when setting spp_ipv6_flowlabel or spp_dscp.
    ====================

    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    David S. Miller
     
  • When users set params.spp_address and get a trans, ipv6_flowlabel flag
    should be applied into this trans. But even if this one is not an ipv6
    trans, it should not go to apply it into all other transes of the asoc
    but simply ignore it.

    Fixes: 0b0dce7a36fb ("sctp: add spp_ipv6_flowlabel and spp_dscp for sctp_paddrparams")
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • Now in sctp_apply_peer_addr_params(), if SPP_IPV6_FLOWLABEL flag is set
    and trans is NULL, it would use trans as the index variable to traverse
    transport_addr_list, then trans is set as the last transport of it.

    Later, if SPP_DSCP flag is set, it would enter into the wrong branch as
    trans is actually an invalid reference.

    So fix it by using a new index variable to traverse transport_addr_list
    for both SPP_DSCP and SPP_IPV6_FLOWLABEL flags process.

    Fixes: 0b0dce7a36fb ("sctp: add spp_ipv6_flowlabel and spp_dscp for sctp_paddrparams")
    Reported-by: Julia Lawall
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • __emac_calc_base_mr1 was used instead of __emac4_calc_base_mr1
    by copy-paste mistake for emac4syn.

    Fixes: 45d6e545505fd32edb812f085be7de45b6a5c0af ("net/ibm/emac: add 8192 rx/tx fifo size")
    Signed-off-by: Ivan Mikhaylov
    Signed-off-by: David S. Miller

    Ivan Mikhaylov
     
  • Currently, tcf_action_delete() nulls actions array pointer after putting
    and deleting it. However, if tcf_idr_delete_index() returns an error,
    pointer to action is not set to null. That results it being released second
    time in error handling code of tca_action_gd().

    Kasan error:

    [ 807.367755] ==================================================================
    [ 807.375844] BUG: KASAN: use-after-free in tc_setup_cb_call+0x14e/0x250
    [ 807.382763] Read of size 8 at addr ffff88033e636000 by task tc/2732

    [ 807.391289] CPU: 0 PID: 2732 Comm: tc Tainted: G W 4.19.0-rc1+ #799
    [ 807.399542] Hardware name: Supermicro SYS-2028TP-DECR/X10DRT-P, BIOS 2.0b 03/30/2017
    [ 807.407948] Call Trace:
    [ 807.410763] dump_stack+0x92/0xeb
    [ 807.414456] print_address_description+0x70/0x360
    [ 807.419549] kasan_report+0x14d/0x300
    [ 807.423582] ? tc_setup_cb_call+0x14e/0x250
    [ 807.428150] tc_setup_cb_call+0x14e/0x250
    [ 807.432539] ? nla_put+0x65/0xe0
    [ 807.436146] fl_dump+0x394/0x3f0 [cls_flower]
    [ 807.440890] ? fl_tmplt_dump+0x140/0x140 [cls_flower]
    [ 807.446327] ? lock_downgrade+0x320/0x320
    [ 807.450702] ? lock_acquire+0xe2/0x220
    [ 807.454819] ? is_bpf_text_address+0x5/0x140
    [ 807.459475] ? memcpy+0x34/0x50
    [ 807.462980] ? nla_put+0x65/0xe0
    [ 807.466582] tcf_fill_node+0x341/0x430
    [ 807.470717] ? tcf_block_put+0xe0/0xe0
    [ 807.474859] tcf_node_dump+0xdb/0xf0
    [ 807.478821] fl_walk+0x8e/0x170 [cls_flower]
    [ 807.483474] tcf_chain_dump+0x35a/0x4d0
    [ 807.487703] ? tfilter_notify+0x170/0x170
    [ 807.492091] ? tcf_fill_node+0x430/0x430
    [ 807.496411] tc_dump_tfilter+0x362/0x3f0
    [ 807.500712] ? tc_del_tfilter+0x850/0x850
    [ 807.505104] ? kasan_unpoison_shadow+0x30/0x40
    [ 807.509940] ? __mutex_unlock_slowpath+0xcf/0x410
    [ 807.515031] netlink_dump+0x263/0x4f0
    [ 807.519077] __netlink_dump_start+0x2a0/0x300
    [ 807.523817] ? tc_del_tfilter+0x850/0x850
    [ 807.528198] rtnetlink_rcv_msg+0x46a/0x6d0
    [ 807.532671] ? rtnl_fdb_del+0x3f0/0x3f0
    [ 807.536878] ? tc_del_tfilter+0x850/0x850
    [ 807.541280] netlink_rcv_skb+0x18d/0x200
    [ 807.545570] ? rtnl_fdb_del+0x3f0/0x3f0
    [ 807.549773] ? netlink_ack+0x500/0x500
    [ 807.553913] netlink_unicast+0x2d0/0x370
    [ 807.558212] ? netlink_attachskb+0x340/0x340
    [ 807.562855] ? _copy_from_iter_full+0xe9/0x3e0
    [ 807.567677] ? import_iovec+0x11e/0x1c0
    [ 807.571890] netlink_sendmsg+0x3b9/0x6a0
    [ 807.576192] ? netlink_unicast+0x370/0x370
    [ 807.580684] ? netlink_unicast+0x370/0x370
    [ 807.585154] sock_sendmsg+0x6b/0x80
    [ 807.589015] ___sys_sendmsg+0x4a1/0x520
    [ 807.593230] ? copy_msghdr_from_user+0x210/0x210
    [ 807.598232] ? do_wp_page+0x174/0x880
    [ 807.602276] ? __handle_mm_fault+0x749/0x1c10
    [ 807.607021] ? __handle_mm_fault+0x1046/0x1c10
    [ 807.611849] ? __pmd_alloc+0x320/0x320
    [ 807.615973] ? check_chain_key+0x140/0x1f0
    [ 807.620450] ? check_chain_key+0x140/0x1f0
    [ 807.624929] ? __fget_light+0xbc/0xd0
    [ 807.628970] ? __sys_sendmsg+0xd7/0x150
    [ 807.633172] __sys_sendmsg+0xd7/0x150
    [ 807.637201] ? __ia32_sys_shutdown+0x30/0x30
    [ 807.641846] ? up_read+0x53/0x90
    [ 807.645442] ? __do_page_fault+0x484/0x780
    [ 807.649949] ? do_syscall_64+0x1e/0x2c0
    [ 807.654164] do_syscall_64+0x72/0x2c0
    [ 807.658198] entry_SYSCALL_64_after_hwframe+0x49/0xbe
    [ 807.663625] RIP: 0033:0x7f42e9870150
    [ 807.667568] Code: 8b 15 3c 7d 2b 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb cd 66 0f 1f 44 00 00 83 3d b9 d5 2b 00 00 75 10 b8 2e 00 00 00 0f 05 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 be cd 00 00 48 89 04 24
    [ 807.687328] RSP: 002b:00007ffdbf595b58 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    [ 807.695564] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f42e9870150
    [ 807.703083] RDX: 0000000000000000 RSI: 00007ffdbf595b80 RDI: 0000000000000003
    [ 807.710605] RBP: 00007ffdbf599d90 R08: 0000000000679bc0 R09: 000000000000000f
    [ 807.718127] R10: 00000000000005e7 R11: 0000000000000246 R12: 00007ffdbf599d88
    [ 807.725651] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000

    [ 807.735048] Allocated by task 2687:
    [ 807.738902] kasan_kmalloc+0xa0/0xd0
    [ 807.742852] __kmalloc+0x118/0x2d0
    [ 807.746615] tcf_idr_create+0x44/0x320
    [ 807.750738] tcf_nat_init+0x41e/0x530 [act_nat]
    [ 807.755638] tcf_action_init_1+0x4e0/0x650
    [ 807.760104] tcf_action_init+0x1ce/0x2d0
    [ 807.764395] tcf_exts_validate+0x1d8/0x200
    [ 807.768861] fl_change+0x55a/0x26b4 [cls_flower]
    [ 807.773845] tc_new_tfilter+0x748/0xa20
    [ 807.778051] rtnetlink_rcv_msg+0x56a/0x6d0
    [ 807.782517] netlink_rcv_skb+0x18d/0x200
    [ 807.786804] netlink_unicast+0x2d0/0x370
    [ 807.791095] netlink_sendmsg+0x3b9/0x6a0
    [ 807.795387] sock_sendmsg+0x6b/0x80
    [ 807.799240] ___sys_sendmsg+0x4a1/0x520
    [ 807.803445] __sys_sendmsg+0xd7/0x150
    [ 807.807473] do_syscall_64+0x72/0x2c0
    [ 807.811506] entry_SYSCALL_64_after_hwframe+0x49/0xbe

    [ 807.818776] Freed by task 2728:
    [ 807.822283] __kasan_slab_free+0x122/0x180
    [ 807.826752] kfree+0xf4/0x2f0
    [ 807.830080] __tcf_action_put+0x5a/0xb0
    [ 807.834281] tcf_action_put_many+0x46/0x70
    [ 807.838747] tca_action_gd+0x232/0xc40
    [ 807.842862] tc_ctl_action+0x215/0x230
    [ 807.846977] rtnetlink_rcv_msg+0x56a/0x6d0
    [ 807.851444] netlink_rcv_skb+0x18d/0x200
    [ 807.855731] netlink_unicast+0x2d0/0x370
    [ 807.860021] netlink_sendmsg+0x3b9/0x6a0
    [ 807.864312] sock_sendmsg+0x6b/0x80
    [ 807.868166] ___sys_sendmsg+0x4a1/0x520
    [ 807.872372] __sys_sendmsg+0xd7/0x150
    [ 807.876401] do_syscall_64+0x72/0x2c0
    [ 807.880431] entry_SYSCALL_64_after_hwframe+0x49/0xbe

    [ 807.887704] The buggy address belongs to the object at ffff88033e636000
    which belongs to the cache kmalloc-256 of size 256
    [ 807.900909] The buggy address is located 0 bytes inside of
    256-byte region [ffff88033e636000, ffff88033e636100)
    [ 807.913155] The buggy address belongs to the page:
    [ 807.918322] page:ffffea000cf98d80 count:1 mapcount:0 mapping:ffff88036f80ee00 index:0x0 compound_mapcount: 0
    [ 807.928831] flags: 0x5fff8000008100(slab|head)
    [ 807.933647] raw: 005fff8000008100 ffffea000db44f00 0000000400000004 ffff88036f80ee00
    [ 807.942050] raw: 0000000000000000 0000000080190019 00000001ffffffff 0000000000000000
    [ 807.950456] page dumped because: kasan: bad access detected

    [ 807.958240] Memory state around the buggy address:
    [ 807.963405] ffff88033e635f00: fc fc fc fc fb fb fb fb fb fb fb fc fc fc fc fb
    [ 807.971288] ffff88033e635f80: fb fb fb fb fb fb fc fc fc fc fc fc fc fc fc fc
    [ 807.979166] >ffff88033e636000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 807.994882] ^
    [ 807.998477] ffff88033e636080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 808.006352] ffff88033e636100: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
    [ 808.014230] ==================================================================
    [ 808.022108] Disabling lock debugging due to kernel taint

    Fixes: edfaf94fa705 ("net_sched: improve and refactor tcf_action_put_many()")
    Signed-off-by: Vlad Buslov
    Acked-by: Cong Wang
    Signed-off-by: David S. Miller

    Vlad Buslov
     
  • The _IOC_READ flag fits this ioctl request more because this request
    actually only writes to, but doesn't read from userspace.
    See NOTEs in include/uapi/asm-generic/ioctl.h for more information.

    Fixes: 429711aec282 ("vhost: switch to use new message format")
    Signed-off-by: Gleb Fotengauer-Malinovskiy
    Acked-by: Jason Wang
    Acked-by: Michael S. Tsirkin
    Signed-off-by: David S. Miller

    Gleb Fotengauer-Malinovskiy
     
  • This card identifies itself as:
    Ethernet controller [0200]: NCube Device [10ff:8168] (rev 06)
    Subsystem: TP-LINK Technologies Co., Ltd. Device [7470:3468]

    Adding a new entry to rtl8169_pci_tbl makes the card work.

    Link: http://launchpad.net/bugs/1788730
    Signed-off-by: Anthony Wong
    Signed-off-by: David S. Miller

    Anthony Wong
     
  • man ip-tunnel ttl section says:
    0 is a special value meaning that packets inherit the TTL value.

    IPv4 tunnel respect this in ip_tunnel_xmit(), but IPv6 tunnel has not
    implement it yet. To make IPv6 behave consistently with IP tunnel,
    add ipv6 tunnel inherit support.

    Signed-off-by: Hangbin Liu
    Signed-off-by: David S. Miller

    Hangbin Liu
     

03 Sep, 2018

13 commits

  • When tracing is enabled, all the debug messages are recorded and must
    not exceed MAX_MSG_LEN (100) columns. Longer debug messages grant the
    user with:

    WARNING: CPU: 3 PID: 32642 at /tmp/wifi-core-20180806094828/src/iwlwifi-stack-dev/net/mac80211/./trace_msg.h:32 trace_event_raw_event_mac80211_msg_event+0xab/0xc0 [mac80211]
    Workqueue: phy1 ieee80211_iface_work [mac80211]
    RIP: 0010:trace_event_raw_event_mac80211_msg_event+0xab/0xc0 [mac80211]
    Call Trace:
    __sdata_dbg+0xbd/0x120 [mac80211]
    ieee80211_ibss_rx_queued_mgmt+0x15f/0x510 [mac80211]
    ieee80211_iface_work+0x21d/0x320 [mac80211]

    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Emmanuel Grumbach
     
  • If the driver fails to properly prepare for the channel
    switch, mac80211 will disconnect. If the CSA IE had mode
    set to 1, it means that the clients are not allowed to send
    any Tx on the current channel, and that includes the
    deauthentication frame.

    Make sure that we don't send the deauthentication frame in
    this case.

    In iwlwifi, this caused a failure to flush queues since the
    firmware already closed the queues after having parsed the
    CSA IE. Then mac80211 would wait until the deauthentication
    frame would go out (drv_flush(drop=false)) and that would
    never happen.

    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Emmanuel Grumbach
     
  • When performing a channel switch flow for a managed interface, the
    flow did not update the bandwidth of the AP station and the rate
    scale algorithm. In case of a channel width downgrade, this would
    result with the rate scale algorithm using a bandwidth that does not
    match the interface channel configuration.

    Fix this by updating the AP station bandwidth and rate scaling algorithm
    before the actual channel change in case of a bandwidth downgrade, or
    after the actual channel change in case of a bandwidth upgrade.

    Signed-off-by: Ilan Peer
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Ilan Peer
     
  • We hit a problem with iwlwifi that was caused by a bug in
    mac80211. A bug in iwlwifi caused the firwmare to crash in
    certain cases in channel switch. Because of that bug,
    drv_pre_channel_switch would fail and trigger the restart
    flow.
    Now we had the hw restart worker which runs on the system's
    workqueue and the csa_connection_drop_work worker that runs
    on mac80211's workqueue that can run together. This is
    obviously problematic since the restart work wants to
    reconfigure the connection, while the csa_connection_drop_work
    worker does the exact opposite: it tries to disconnect.

    Fix this by cancelling the csa_connection_drop_work worker
    in the restart worker.

    Note that this can sound racy: we could have:

    driver iface_work CSA_work restart_work
    +++++++++++++++++++++++++++++++++++++++++++++
    |

    -CS FAILED-->
    | |
    | cancel_work(CSA)
    schedule |
    CSA work |
    | |
    Race between those 2

    But this is not possible because we flush the workqueue
    in the restart worker before we cancel the CSA worker.
    That would be bullet proof if we could guarantee that
    we schedule the CSA worker only from the iface_work
    which runs on the workqueue (and not on the system's
    workqueue), but unfortunately we do have an instance
    in which we schedule the CSA work outside the context
    of the workqueue (ieee80211_chswitch_done).

    Note also that we should probably cancel other workers
    like beacon_connection_loss_work and possibly others
    for different types of interfaces, at the very least,
    IBSS should suffer from the exact same problem, but for
    now, do the minimum to fix the actual bug that was actually
    experienced and reproduced.

    Signed-off-by: Emmanuel Grumbach
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Emmanuel Grumbach
     
  • In commit 9236c4523e5b ("mac80211: limit wmm params to comply
    with ETSI requirements"), we have limited the WMM parameters to
    comply with 802.11 and ETSI standard. Mistakenly the TXOP value
    was caluclated wrong. Fix it by taking the minimum between
    802.11 to ETSI to make sure we are not violating both.

    Fixes: e552af058148 ("mac80211: limit wmm params to comply with ETSI requirements")
    Signed-off-by: Haim Dreyfuss
    Signed-off-by: Luca Coelho
    Signed-off-by: Johannes Berg

    Dreyfuss, Haim
     
  • The "chandef->center_freq1" variable is a u32 but "freq" is a u16 so we
    are truncating away the high bits. I noticed this bug because in commit
    9cf0a0b4b64a ("cfg80211: Add support for 60GHz band channels 5 and 6")
    we made "freq
    Signed-off-by: Johannes Berg

    Dan Carpenter
     
  • Initialize 'n' to 2 in order to take into account also the first
    packet in the estimation of max_subframe limit for a given A-MSDU
    since frag_tail pointer is NULL when ieee80211_amsdu_aggregate
    routine analyzes the second frame.

    Fixes: 6e0456b54545 ("mac80211: add A-MSDU tx support")
    Signed-off-by: Lorenzo Bianconi
    Signed-off-by: Johannes Berg

    Lorenzo Bianconi
     
  • Pull dma-mapping fixes from Christoph Hellwig:
    "A few fixes for the fallout of being a little more pedantic about dma
    masks"

    * tag 'dma-mapping-4.19-2' of git://git.infradead.org/users/hch/dma-mapping:
    of/platform: initialise AMBA default DMA masks
    sparc: set a default 32-bit dma mask for OF devices
    kernel/dma/direct: take DMA offset into account in dma_direct_supported

    Linus Torvalds
     
  • Include linux/in6.h for struct in6_addr.

    /usr/include/linux/rds.h:156:18: error: field ‘laddr’ has incomplete type
    struct in6_addr laddr;
    ^~~~~
    /usr/include/linux/rds.h:157:18: error: field ‘faddr’ has incomplete type
    struct in6_addr faddr;
    ^~~~~
    /usr/include/linux/rds.h:178:18: error: field ‘laddr’ has incomplete type
    struct in6_addr laddr;
    ^~~~~
    /usr/include/linux/rds.h:179:18: error: field ‘faddr’ has incomplete type
    struct in6_addr faddr;
    ^~~~~
    /usr/include/linux/rds.h:198:18: error: field ‘bound_addr’ has incomplete type
    struct in6_addr bound_addr;
    ^~~~~~~~~~
    /usr/include/linux/rds.h:199:18: error: field ‘connected_addr’ has incomplete type
    struct in6_addr connected_addr;
    ^~~~~~~~~~~~~~
    /usr/include/linux/rds.h:219:18: error: field ‘local_addr’ has incomplete type
    struct in6_addr local_addr;
    ^~~~~~~~~~
    /usr/include/linux/rds.h:221:18: error: field ‘peer_addr’ has incomplete type
    struct in6_addr peer_addr;
    ^~~~~~~~~
    /usr/include/linux/rds.h:245:18: error: field ‘src_addr’ has incomplete type
    struct in6_addr src_addr;
    ^~~~~~~~
    /usr/include/linux/rds.h:246:18: error: field ‘dst_addr’ has incomplete type
    struct in6_addr dst_addr;
    ^~~~~~~~

    Fixes: b7ff8b1036f0 ("rds: Extend RDS API for IPv6 support")
    Signed-off-by: Vinson Lee
    Acked-by: Santosh Shilimkar
    Signed-off-by: David S. Miller

    Vinson Lee
     
  • The kernel module may sleep with holding a spinlock.

    The function call paths (from bottom to top) in Linux-4.16 are:

    [FUNC] usleep_range
    drivers/net/ethernet/cadence/macb_main.c, 648:
    usleep_range in macb_halt_tx
    drivers/net/ethernet/cadence/macb_main.c, 730:
    macb_halt_tx in macb_tx_error_task
    drivers/net/ethernet/cadence/macb_main.c, 721:
    _raw_spin_lock_irqsave in macb_tx_error_task

    To fix this bug, usleep_range() is replaced with udelay().

    This bug is found by my static analysis tool DSAC.

    Signed-off-by: Jia-Ju Bai
    Signed-off-by: David S. Miller

    Jia-Ju Bai
     
  • Daniel Borkmann says:

    ====================
    pull-request: bpf 2018-09-02

    The following pull-request contains BPF updates for your *net* tree.

    The main changes are:

    1) Fix one remaining buggy offset override in sockmap's bpf_msg_pull_data()
    when linearizing multiple scatterlist elements, from Tushar.

    2) Fix BPF sockmap's misuse of ULP when a collision with another ULP is
    found on map update where it would release existing ULP. syzbot found and
    triggered this couple of times now, fix from John.

    3) Add missing xskmap type to bpftool so it will properly show the type
    on map dump, from Prashant.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Linus Torvalds
     
  • Jan reported a regression after an update to 4.18.5. In this case ipv6
    default route is setup by systemd-networkd based on data from an RA. The
    RA contains an MTU of 1492 which is used when the route is first inserted
    but then systemd-networkd pushes down updates to the default route
    without the mtu set.

    Prior to the change to fib6_info, metrics such as MTU were held in the
    dst_entry and rt6i_pmtu in rt6_info contained an update to the mtu if
    any. ip6_mtu would look at rt6i_pmtu first and use it if set. If not,
    the value from the metrics is used if it is set and finally falling
    back to the idev value.

    After the fib6_info change metrics are contained in the fib6_info struct
    and there is no equivalent to rt6i_pmtu. To maintain consistency with
    the old behavior the new code should only reset the MTU in the metrics
    if the route update has it set.

    Fixes: d4ead6b34b67 ("net/ipv6: move metrics from dst to rt6_info")
    Reported-by: Jan Janssen
    Signed-off-by: David Ahern
    Signed-off-by: David S. Miller

    David Ahern