27 Oct, 2017

5 commits

  • t->err_count is used to count the link failure on tunnel and an err
    will be reported to user socket in tx path if t->err_count is not 0.
    udp socket could even return EHOSTUNREACH to users.

    Since commit fd58156e456d ("IPIP: Use ip-tunneling code.") removed
    the 'switch check' for icmp type in ipip_err(), err_count would be
    increased by the icmp packet with ICMP_EXC_FRAGTIME code. an link
    failure would be reported out due to this.

    In Jianlin's case, when receiving ICMP_EXC_FRAGTIME a icmp packet,
    udp netperf failed with the err:
    send_data: data send error: No route to host (errno 113)

    We expect this error reported from tunnel to socket when receiving
    some certain type icmp, but not ICMP_EXC_FRAGTIME, ICMP_SR_FAILED
    or ICMP_PARAMETERPROB ones.

    This patch is to bring 'switch check' for icmp type back to ipip_err
    so that it only reports link failure for the right type icmp, just as
    in ipgre_err() and ipip6_err().

    Fixes: fd58156e456d ("IPIP: Use ip-tunneling code.")
    Reported-by: Jianlin Shi
    Signed-off-by: Xin Long
    Signed-off-by: David S. Miller

    Xin Long
     
  • According to DWMAC databook the first queue operating mode
    must always be in DCB.

    As MTL_QUEUE_DCB = 1, we need to always set the first queue
    operating mode to DCB otherwise driver will think that queue
    is in AVB mode (because MTL_QUEUE_AVB = 0).

    Signed-off-by: Jose Abreu
    Cc: Joao Pinto
    Cc: David S. Miller
    Cc: Giuseppe Cavallaro
    Cc: Alexandre Torgue
    Signed-off-by: David S. Miller

    Jose Abreu
     
  • According to DT bindings documentation we are expecting a
    property called "snps,read-requests" but we are parsing
    instead a property called "read,read-requests".

    This is clearly a typo. Fix it.

    Signed-off-by: Jose Abreu
    Cc: Joao Pinto
    Cc: David S. Miller
    Cc: Giuseppe Cavallaro
    Cc: Alexandre Torgue
    Signed-off-by: David S. Miller

    Jose Abreu
     
  • Saeed Mahameed says:

    ====================
    Mellanox, mlx5 fixes 2017-10-26

    The series includes some misc fixes for mlx5 core and etherent driver.
    Please pull and let me know if there's any problem.

    For -Stable:
    net/mlx5e: Properly deal with encap flows add/del under neigh update (kernels >= 4.12)
    net/mlx5: Fix health work queue spin lock to IRQ safe (kernels >= 4.13)
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • …kernel/git/jberg/mac80211

    Johannes Berg says:

    ====================
    pull-request: mac80211 2017-10-25

    Here are:
    * follow-up fixes for the WoWLAN security issue, to fix a
    partial TKIP key material problem and to use crypto_memneq()
    * a change for better enforcement of FQ's memory limit
    * a disconnect/connect handling fix, and
    * a user rate mask validation fix
    ====================

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

    David S. Miller
     

26 Oct, 2017

16 commits

  • Double free of skb_array in tap module is causing kernel panic. When
    tap_set_queue() fails we free skb_array right away by calling
    skb_array_cleanup(). However, later on skb_array_cleanup() is called
    again by tap_sock_destruct through sock_put(). This patch fixes that
    issue.

    Fixes: 362899b8725b35e3 (macvtap: switch to use skb array)
    Signed-off-by: Girish Moodalbail
    Acked-by: Jason Wang
    Signed-off-by: David S. Miller

    Girish Moodalbail
     
  • Current implementation calls tcp_rate_skb_sent() when tcp_transmit_skb()
    is called when it clones skb only. Not calling tcp_rate_skb_sent() is OK
    for all such code paths except from __tcp_retransmit_skb() which happens
    when skb->data address is not aligned. This may rarely happen e.g. when
    small amount of data is sent initially and the receiver partially acks
    odd number of bytes for some reason, possibly malicious.

    Signed-off-by: Yousuk Seung
    Signed-off-by: Neal Cardwell
    Signed-off-by: Soheil Hassas Yeganeh
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Yousuk Seung
     
  • In my first attempt to fix the lockdep splat, I forgot we could
    enter inet_csk_route_req() with a freshly allocated request socket,
    for which refcount has not yet been elevated, due to complex
    SLAB_TYPESAFE_BY_RCU rules.

    We either are in rcu_read_lock() section _or_ we own a refcount on the
    request.

    Correct RCU verb to use here is rcu_dereference_check(), although it is
    not possible to prove we actually own a reference on a shared
    refcount :/

    In v2, I added ireq_opt_deref() helper and use in three places, to fix other
    possible splats.

    [ 49.844590] lockdep_rcu_suspicious+0xea/0xf3
    [ 49.846487] inet_csk_route_req+0x53/0x14d
    [ 49.848334] tcp_v4_route_req+0xe/0x10
    [ 49.850174] tcp_conn_request+0x31c/0x6a0
    [ 49.851992] ? __lock_acquire+0x614/0x822
    [ 49.854015] tcp_v4_conn_request+0x5a/0x79
    [ 49.855957] ? tcp_v4_conn_request+0x5a/0x79
    [ 49.858052] tcp_rcv_state_process+0x98/0xdcc
    [ 49.859990] ? sk_filter_trim_cap+0x2f6/0x307
    [ 49.862085] tcp_v4_do_rcv+0xfc/0x145
    [ 49.864055] ? tcp_v4_do_rcv+0xfc/0x145
    [ 49.866173] tcp_v4_rcv+0x5ab/0xaf9
    [ 49.868029] ip_local_deliver_finish+0x1af/0x2e7
    [ 49.870064] ip_local_deliver+0x1b2/0x1c5
    [ 49.871775] ? inet_del_offload+0x45/0x45
    [ 49.873916] ip_rcv_finish+0x3f7/0x471
    [ 49.875476] ip_rcv+0x3f1/0x42f
    [ 49.876991] ? ip_local_deliver_finish+0x2e7/0x2e7
    [ 49.878791] __netif_receive_skb_core+0x6d3/0x950
    [ 49.880701] ? process_backlog+0x7e/0x216
    [ 49.882589] __netif_receive_skb+0x1d/0x5e
    [ 49.884122] process_backlog+0x10c/0x216
    [ 49.885812] net_rx_action+0x147/0x3df

    Fixes: a6ca7abe53633 ("tcp/dccp: fix lockdep splat in inet_csk_route_req()")
    Fixes: c92e8c02fe66 ("tcp/dccp: fix ireq->opt races")
    Signed-off-by: Eric Dumazet
    Reported-by: kernel test robot
    Reported-by: Maciej Żenczykowski
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • The number of unsignaled work-requests posted to the IB send queue is
    tracked by a counter in the rds_ib_connection struct. When it reaches
    zero, or the caller explicitly asks for it, the send-signaled bit is
    set in send_flags and the counter is reset. This is performed by the
    rds_ib_set_wr_signal_state() function.

    However, this function is not always used which yields inaccurate
    accounting. This commit fixes this, re-factors a code bloat related to
    the matter, and makes the actual parameter type to the function
    consistent.

    Signed-off-by: Håkon Bugge
    Signed-off-by: David S. Miller

    Håkon Bugge
     
  • send_flags needs to be initialized before calling
    rds_ib_set_wr_signal_state().

    Signed-off-by: Håkon Bugge
    Acked-by: Santosh Shilimkar
    Signed-off-by: David S. Miller

    Håkon Bugge
     
  • …nux/kernel/git/mkl/linux-can

    Marc Kleine-Budde says:

    ====================
    pull-request: can 2017-10-24

    here's another pull request for net/master.

    The patch by Gerhard Bertelsmann fixes the CAN_CTRLMODE_LOOPBACK in the
    sun4i driver. Two patches by Jimmy Assarsson for the kvaser_usb driver
    fix a print in the error path of the kvaser_usb_close() and remove a
    wrong warning message with the Leaf v2 firmware version v4.1.844.
    ====================

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

    David S. Miller
     
  • This patch replaces GFP_KERNEL by GFP_ATOMIC to avoid sleeping in the
    ndo_set_rx_mode() call which is called with BH disabled.

    Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Antoine Tenart
     
  • When calling mvpp2_prs_mac_multi_set() from mvpp2_prs_mac_init(), two
    parameters (the port index and the table index) are inverted. Fixes
    this.

    Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Antoine Tenart
     
  • This patch fixes a typo in the mvpp2_prs_tcam_data_cmp() function, as
    the shift value is inverted with the data.

    Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Antoine Tenart
     
  • Previously, tc with ets type and zero bandwidth is not accepted
    by driver. This behavior does not follow the IEEE802.1qaz spec.

    If there are tcs with ets type and zero bandwidth, these tcs are
    assigned to the lowest priority tc_group #0. We equally distribute
    100% bw of the tc_group #0 to these zero bandwidth ets tcs.
    Also, the non zero bandwidth ets tcs are assigned to tc_group #1.

    If there is no zero bandwidth ets tc, the non zero bandwidth ets tcs
    are assigned to tc_group #0.

    Fixes: cdcf11212b22 ("net/mlx5e: Validate BW weight values of ETS")
    Signed-off-by: Huy Nguyen
    Reviewed-by: Parav Pandit
    Signed-off-by: Saeed Mahameed

    Huy Nguyen
     
  • Currently, the encap action offload is handled in the actions parse
    function and not in mlx5e_tc_add_fdb_flow() where we deal with all
    the other aspects of offloading actions (vlan, modify header) and
    the rule itself.

    When the neigh update code (mlx5e_tc_encap_flows_add()) recreates the
    encap entry and offloads the related flows, we wrongly call again into
    mlx5e_tc_add_fdb_flow(), this for itself would cause us to handle
    again the offloading of vlans and header re-write which puts things
    in non consistent state and step on freed memory (e.g the modify
    header parse buffer which is already freed).

    Since on error, mlx5e_tc_add_fdb_flow() detaches and may release the
    encap entry, it causes a corruption at the neigh update code which goes
    over the list of flows associated with this encap entry, or double free
    when the tc flow is later deleted by user-space.

    When neigh update (mlx5e_tc_encap_flows_del()) unoffloads the flows related
    to an encap entry which is now invalid, we do a partial repeat of the eswitch
    flow removal code which is wrong too.

    To fix things up we do the following:

    (1) handle the encap action offload in the eswitch flow add function
    mlx5e_tc_add_fdb_flow() as done for the other actions and the rule itself.

    (2) modify the neigh update code (mlx5e_tc_encap_flows_add/del) to only
    deal with the encap entry and rules delete/add and not with any of
    the other offloaded actions.

    Fixes: 232c001398ae ('net/mlx5e: Add support to neighbour update flow')
    Signed-off-by: Or Gerlitz
    Reviewed-by: Paul Blakey
    Signed-off-by: Saeed Mahameed

    Or Gerlitz
     
  • mlx5_ib_add is called during mlx5_pci_resume after a pci error.
    Before mlx5_ib_add completes, there are multiple events which trigger
    function mlx5_ib_event. This cause kernel panic because mlx5_ib_event
    accesses unitialized resources.

    The fix is to extend Erez Shitrit's patch
    ("net/mlx5: Delay events till ib registration ends") to cover
    the pci resume code path.

    Trace:
    mlx5_core 0001:01:00.6: mlx5_pci_resume was called
    mlx5_core 0001:01:00.6: firmware version: 16.20.1011
    mlx5_core 0001:01:00.6: mlx5_attach_interface:164:(pid 779):
    mlx5_ib_event:2996:(pid 34777): warning: event on port 1
    mlx5_ib_event:2996:(pid 34782): warning: event on port 1
    Unable to handle kernel paging request for data at address 0x0001c104
    Faulting instruction address: 0xd000000008f411fc
    Oops: Kernel access of bad area, sig: 11 [#1]
    ...
    ...
    Call Trace:
    [c000000fff77bb70] [d000000008f4119c] mlx5_ib_event+0x64/0x470 [mlx5_ib] (unreliable)
    [c000000fff77bc60] [d000000008e67130] mlx5_core_event+0xb8/0x210 [mlx5_core]
    [c000000fff77bd10] [d000000008e4bd00] mlx5_eq_int+0x528/0x860[mlx5_core]

    Fixes: 97834eba7c19 ("net/mlx5: Delay events till ib registration ends")
    Signed-off-by: Huy Nguyen
    Reviewed-by: Saeed Mahameed
    Signed-off-by: Saeed Mahameed

    Huy Nguyen
     
  • spin_lock/unlock of health->wq_lock should be IRQ safe.
    It was changed to spin_lock_irqsave since adding commit 0179720d6be2
    ("net/mlx5: Introduce trigger_health_work function") which uses
    spin_lock from asynchronous event (IRQ) context.
    Thus, all spin_lock/unlock of health->wq_lock should have been moved
    to IRQ safe mode.
    However, one occurrence on new code using this lock missed that
    change, resulting in possible deadlock:
    kernel: Possible unsafe locking scenario:
    kernel: CPU0
    kernel: ----
    kernel: lock(&(&health->wq_lock)->rlock);
    kernel:
    kernel: lock(&(&health->wq_lock)->rlock);
    kernel: #012 *** DEADLOCK ***

    Fixes: 2a0165a034ac ("net/mlx5: Cancel delayed recovery work when unloading the driver")
    Signed-off-by: Moshe Shemesh
    Signed-off-by: Saeed Mahameed

    Moshe Shemesh
     
  • If the name argument of dev_get_valid_name() contains "%d", it will try
    to assign it a unit number in __dev__alloc_name() and return either the
    unit number (>= 0) or an error code (< 0).
    Considering positive values as error values prevent tun device creations
    relying this mechanism, therefor we should only consider negative values
    as errors here.

    Signed-off-by: Julien Gomes
    Acked-by: Cong Wang
    Signed-off-by: David S. Miller

    Julien Gomes
     
  • Previously we did not ensure that a netdev is a representative netdev
    before dereferencing its private data. This can occur when an upper netdev
    is created on a representative netdev. This patch corrects this by first
    ensuring that the netdev is a representative netdev before using it.
    Checking only switchdev_port_same_parent_id is not sufficient to ensure
    that we can safely use the netdev. Failing to check that the netdev is also
    a representative netdev would result in incorrect dereferencing.

    Fixes: 1a1e586f54bf ("nfp: add basic action capabilities to flower offloads")
    Signed-off-by: Jakub Kicinski
    Signed-off-by: Pieter Jansen van Vuuren
    Signed-off-by: David S. Miller

    Pieter Jansen van Vuuren
     
  • socket_diag shows information only about sockets from a namespace where
    a diag socket lives.

    But if we request information about one unix socket, the kernel don't
    check that its netns is matched with a diag socket namespace, so any
    user can get information about any unix socket in a system. This looks
    like a bug.

    v2: add a Fixes tag

    Fixes: 51d7cccf0723 ("net: make sock diag per-namespace")
    Signed-off-by: Andrei Vagin
    Signed-off-by: David S. Miller

    Andrei Vagin
     

25 Oct, 2017

3 commits

  • For the reinstall prevention, the code I had added compares the
    whole key. It turns out though that iwlwifi firmware doesn't
    provide the TKIP TX MIC key as it's not needed in client mode,
    and thus the comparison will always return false.

    For client mode, thus always zero out the TX MIC key part before
    doing the comparison in order to avoid accepting the reinstall
    of the key with identical encryption and RX MIC key, but not the
    same TX MIC key (since the supplicant provides the real one.)

    Fixes: fdf7cb4185b6 ("mac80211: accept key reinstall without changing anything")
    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • In the case of pdata, the dsa_cpu_parse function calls dev_put() before
    making sure it isn't NULL. Fix this.

    Fixes: 71e0bbde0d88 ("net: dsa: Add support for platform data")
    Signed-off-by: Vivien Didelot
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Vivien Didelot
     
  • Sock lock may be taken in the message timer function which is a
    problem since timers run in BH. Instead of timers use delayed_work.

    Reported-by: Eric Dumazet
    Fixes: bbb03029a899 ("strparser: Generalize strparser")
    Signed-off-by: Tom Herbert
    Signed-off-by: David S. Miller

    Tom Herbert
     

24 Oct, 2017

10 commits

  • Steffen Klassert says:

    ====================
    pull request (net): ipsec 2017-10-24

    1) Fix a memleak when we don't find a inner_mode
    during bundle creation. From David Miller.

    2) Fix a xfrm policy dump crash. We may crash
    on error when dumping policies via netlink.
    Fix this by initializing the policy walk
    with the cb->start method. This fix is a
    serious stable candidate. From Herbert Xu.

    Please pull or let me know if there are problems.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • To avoid kernel warning "Unhandled message (68)", ignore the
    CMD_FLUSH_QUEUE_REPLY message for now.

    As of Leaf v2 firmware version v4.1.844 (2017-02-15), flush tx queue is
    synchronous. There is a capability bit indicating whether flushing tx
    queue is synchronous or asynchronous.

    A proper solution would be to query the device for capabilities. If the
    synchronous tx flush capability bit is set, we should wait for
    CMD_FLUSH_QUEUE_REPLY message, while flushing the tx queue.

    Signed-off-by: Jimmy Assarsson
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Jimmy Assarsson
     
  • If the return value from kvaser_usb_send_simple_msg() was non-zero, the
    return value from kvaser_usb_flush_queue() was printed in the kernel
    warning.

    Signed-off-by: Jimmy Assarsson
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Jimmy Assarsson
     
  • Fix loopback mode by setting the right flag and remove presume mode.

    Signed-off-by: Gerhard Bertelsmann
    Cc: linux-stable
    Signed-off-by: Marc Kleine-Budde

    Gerhard Bertelsmann
     
  • Commit 9b9742022888 ("sctp: support ipv6 nonlocal bind")
    introduced support for the above options as v4 sctp did,
    so patched sctp_v6_available().

    In the v4 implementation it's enough, because
    sctp_inet_bind_verify() just returns with sctp_v4_available().
    However sctp_inet6_bind_verify() has an extra check before that
    for link-local scope_id, which won't respect the above options.

    Added the checks before calling ipv6_chk_addr(), but
    not before the validation of scope_id.

    before (w/ both options):
    ./v6test fe80::10 sctp
    bind failed, errno: 99 (Cannot assign requested address)
    ./v6test fe80::10 tcp
    bind success, errno: 0 (Success)

    after (w/ both options):
    ./v6test fe80::10 sctp
    bind success, errno: 0 (Success)

    Signed-off-by: Laszlo Toth
    Reviewed-by: Xin Long
    Signed-off-by: David S. Miller

    Laszlo Toth
     
  • When Tx IRQs are used, txq_bufs_free() can be called from both the Tx
    path and from NAPI poll(). This led to CPU stalls as if these two tasks
    (Tx and Poll) are scheduled on two CPUs at the same time, DMA unmapping
    operations are done on the same txq buffers.

    This patch adds a check not to call txq_done() from the Tx path if Tx
    interrupts are used as it does not make sense to do so.

    Fixes: edc660fa09e2 ("net: mvpp2: replace TX coalescing interrupts with hrtimer")
    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Antoine Tenart
     
  • The TSO header buffers are coming from a per cpu pool and should not
    be unmapped as they are reused. The PPv2 driver was unmapping all
    descriptors buffers unconditionally. This patch fixes this by checking
    the buffers dma addresses before unmapping them, and by not unmapping
    those who are located in the TSO header pool.

    Fixes: 186cd4d4e414 ("net: mvpp2: software tso support")
    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Antoine Tenart
     
  • TSO headers are managed with txq index and therefore should be aligned
    with the txq size, not with the aggregated txq size.

    Fixes: 186cd4d4e414 ("net: mvpp2: software tso support")
    Reported-by: Marc Zyngier
    Signed-off-by: Yan Markman
    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Yan Markman
     
  • The Huawei ME906 (12d1:15c1) comes with a standard ECM interface that
    requires management via AT commands sent over one of the control TTYs
    (e.g. connected with AT^NDISDUP).

    Signed-off-by: Aleksander Morgado
    Signed-off-by: David S. Miller

    Aleksander Morgado
     
  • This product is named 'TP-LINK USB 3.0 Gigabit Ethernet Network
    Adapter (Model No.is UE300)'. It uses chip RTL8153 and works with
    driver drivers/net/usb/r8152.c

    Signed-off-by: Ran Wang
    Signed-off-by: David S. Miller

    Ran Wang
     

23 Oct, 2017

3 commits

  • An independent security researcher, Mohamed Ghannam, has reported
    this vulnerability to Beyond Security's SecuriTeam Secure Disclosure
    program.

    The xfrm_dump_policy_done function expects xfrm_dump_policy to
    have been called at least once or it will crash. This can be
    triggered if a dump fails because the target socket's receive
    buffer is full.

    This patch fixes it by using the cb->start mechanism to ensure that
    the initialisation is always done regardless of the buffer situation.

    Fixes: 12a169e7d8f4 ("ipsec: Put dumpers on the dump list")
    Signed-off-by: Herbert Xu
    Signed-off-by: Steffen Klassert

    Herbert Xu
     
  • This patch fixes the following lockdep splat in inet_csk_route_req()

    lockdep_rcu_suspicious
    inet_csk_route_req
    tcp_v4_send_synack
    tcp_rtx_synack
    inet_rtx_syn_ack
    tcp_fastopen_synack_time
    tcp_retransmit_timer
    tcp_write_timer_handler
    tcp_write_timer
    call_timer_fn

    Thread running inet_csk_route_req() owns a reference on the request
    socket, so we have the guarantee ireq->ireq_opt wont be changed or
    freed.

    lockdep can enforce this invariant for us.

    Fixes: c92e8c02fe66 ("tcp/dccp: fix ireq->opt races")
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • When retransmission on TSQ handler was introduced in the commit
    f9616c35a0d7 ("tcp: implement TSQ for retransmits"), the retransmitted
    skbs' timestamps were updated on the actual transmission. In the later
    commit 385e20706fac ("tcp: use tp->tcp_mstamp in output path"), it stops
    being done so. In the commit, the comment says "We try to refresh
    tp->tcp_mstamp only when necessary", and at present tcp_tsq_handler and
    tcp_v4_mtu_reduced applies to this. About the latter, it's okay since
    it's rare enough.

    About the former, even though possible retransmissions on the tasklet
    comes just after the destructor run in NET_RX softirq handling, the time
    between them could be nonnegligibly large to the extent that
    tcp_rack_advance or rto rearming be affected if other (remaining) RX,
    BLOCK and (preceding) TASKLET sofirq handlings are unexpectedly heavy.

    So in the same way as tcp_write_timer_handler does, doing tcp_mstamp_refresh
    ensures the accuracy of algorithms relying on it.

    Fixes: 385e20706fac ("tcp: use tp->tcp_mstamp in output path")
    Signed-off-by: Koichiro Den
    Reviewed-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Koichiro Den
     

22 Oct, 2017

3 commits

  • Pull networking fixes from David Miller:
    "A little more than usual this time around. Been travelling, so that is
    part of it.

    Anyways, here are the highlights:

    1) Deal with memcontrol races wrt. listener dismantle, from Eric
    Dumazet.

    2) Handle page allocation failures properly in nfp driver, from Jaku
    Kicinski.

    3) Fix memory leaks in macsec, from Sabrina Dubroca.

    4) Fix crashes in pppol2tp_session_ioctl(), from Guillaume Nault.

    5) Several fixes in bnxt_en driver, including preventing potential
    NVRAM parameter corruption from Michael Chan.

    6) Fix for KRACK attacks in wireless, from Johannes Berg.

    7) rtnetlink event generation fixes from Xin Long.

    8) Deadlock in mlxsw driver, from Ido Schimmel.

    9) Disallow arithmetic operations on context pointers in bpf, from
    Jakub Kicinski.

    10) Missing sock_owned_by_user() check in sctp_icmp_redirect(), from
    Xin Long.

    11) Only TCP is supported for sockmap, make that explicit with a
    check, from John Fastabend.

    12) Fix IP options state races in DCCP and TCP, from Eric Dumazet.

    13) Fix panic in packet_getsockopt(), also from Eric Dumazet.

    14) Add missing locked in hv_sock layer, from Dexuan Cui.

    15) Various aquantia bug fixes, including several statistics handling
    cures. From Igor Russkikh et al.

    16) Fix arithmetic overflow in devmap code, from John Fastabend.

    17) Fix busted socket memory accounting when we get a fault in the tcp
    zero copy paths. From Willem de Bruijn.

    18) Don't leave opt->tot_len uninitialized in ipv6, from Eric Dumazet"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (106 commits)
    stmmac: Don't access tx_q->dirty_tx before netif_tx_lock
    ipv6: flowlabel: do not leave opt->tot_len with garbage
    of_mdio: Fix broken PHY IRQ in case of probe deferral
    textsearch: fix typos in library helpers
    rxrpc: Don't release call mutex on error pointer
    net: stmmac: Prevent infinite loop in get_rx_timestamp_status()
    net: stmmac: Fix stmmac_get_rx_hwtstamp()
    net: stmmac: Add missing call to dev_kfree_skb()
    mlxsw: spectrum_router: Configure TIGCR on init
    mlxsw: reg: Add Tunneling IPinIP General Configuration Register
    net: ethtool: remove error check for legacy setting transceiver type
    soreuseport: fix initialization race
    net: bridge: fix returning of vlan range op errors
    sock: correct sk_wmem_queued accounting on efault in tcp zerocopy
    bpf: add test cases to bpf selftests to cover all access tests
    bpf: fix pattern matches for direct packet access
    bpf: fix off by one for range markings with L{T, E} patterns
    bpf: devmap fix arithmetic overflow in bitmap_size calculation
    net: aquantia: Bad udp rate on default interrupt coalescing
    net: aquantia: Enable coalescing management via ethtool interface
    ...

    Linus Torvalds
     
  • This is the possible reason for different hard to reproduce
    problems on my ARMv7-SMP test system.

    The symptoms are in recent kernels imprecise external aborts,
    and in older kernels various kinds of network stalls and
    unexpected page allocation failures.

    My testing indicates that the trouble started between v4.5 and v4.6
    and prevails up to v4.14.

    Using the dirty_tx before acquiring the spin lock is clearly
    wrong and was first introduced with v4.6.

    Fixes: e3ad57c96715 ("stmmac: review RX/TX ring management")

    Signed-off-by: Bernd Edlinger
    Signed-off-by: David S. Miller

    Bernd Edlinger
     
  • When syzkaller team brought us a C repro for the crash [1] that
    had been reported many times in the past, I finally could find
    the root cause.

    If FlowLabel info is merged by fl6_merge_options(), we leave
    part of the opt_space storage provided by udp/raw/l2tp with random value
    in opt_space.tot_len, unless a control message was provided at sendmsg()
    time.

    Then ip6_setup_cork() would use this random value to perform a kzalloc()
    call. Undefined behavior and crashes.

    Fix is to properly set tot_len in fl6_merge_options()

    At the same time, we can also avoid consuming memory and cpu cycles
    to clear it, if every option is copied via a kmemdup(). This is the
    change in ip6_setup_cork().

    [1]
    kasan: CONFIG_KASAN_INLINE enabled
    kasan: GPF could be caused by NULL-ptr deref or user memory access
    general protection fault: 0000 [#1] SMP KASAN
    Dumping ftrace buffer:
    (ftrace buffer empty)
    Modules linked in:
    CPU: 0 PID: 6613 Comm: syz-executor0 Not tainted 4.14.0-rc4+ #127
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    task: ffff8801cb64a100 task.stack: ffff8801cc350000
    RIP: 0010:ip6_setup_cork+0x274/0x15c0 net/ipv6/ip6_output.c:1168
    RSP: 0018:ffff8801cc357550 EFLAGS: 00010203
    RAX: dffffc0000000000 RBX: ffff8801cc357748 RCX: 0000000000000010
    RDX: 0000000000000002 RSI: ffffffff842bd1d9 RDI: 0000000000000014
    RBP: ffff8801cc357620 R08: ffff8801cb17f380 R09: ffff8801cc357b10
    R10: ffff8801cb64a100 R11: 0000000000000000 R12: ffff8801cc357ab0
    R13: ffff8801cc357b10 R14: 0000000000000000 R15: ffff8801c3bbf0c0
    FS: 00007f9c5c459700(0000) GS:ffff8801db200000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000020324000 CR3: 00000001d1cf2000 CR4: 00000000001406f0
    DR0: 0000000020001010 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000600
    Call Trace:
    ip6_make_skb+0x282/0x530 net/ipv6/ip6_output.c:1729
    udpv6_sendmsg+0x2769/0x3380 net/ipv6/udp.c:1340
    inet_sendmsg+0x11f/0x5e0 net/ipv4/af_inet.c:762
    sock_sendmsg_nosec net/socket.c:633 [inline]
    sock_sendmsg+0xca/0x110 net/socket.c:643
    SYSC_sendto+0x358/0x5a0 net/socket.c:1750
    SyS_sendto+0x40/0x50 net/socket.c:1718
    entry_SYSCALL_64_fastpath+0x1f/0xbe
    RIP: 0033:0x4520a9
    RSP: 002b:00007f9c5c458c08 EFLAGS: 00000216 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 0000000000718000 RCX: 00000000004520a9
    RDX: 0000000000000001 RSI: 0000000020fd1000 RDI: 0000000000000016
    RBP: 0000000000000086 R08: 0000000020e0afe4 R09: 000000000000001c
    R10: 0000000000000000 R11: 0000000000000216 R12: 00000000004bb1ee
    R13: 00000000ffffffff R14: 0000000000000016 R15: 0000000000000029
    Code: e0 07 83 c0 03 38 d0 7c 08 84 d2 0f 85 ea 0f 00 00 48 8d 79 04 48 b8 00 00 00 00 00 fc ff df 45 8b 74 24 04 48 89 fa 48 c1 ea 03 b6 14 02 48 89 f8 83 e0 07 83 c0 03 38 d0 7c 08 84 d2 0f 85
    RIP: ip6_setup_cork+0x274/0x15c0 net/ipv6/ip6_output.c:1168 RSP: ffff8801cc357550

    Signed-off-by: Eric Dumazet
    Reported-by: Dmitry Vyukov
    Signed-off-by: David S. Miller

    Eric Dumazet