1. 06 Nov, 2019 4 commits
    • John Hurley's avatar
      net: sched: prevent duplicate flower rules from tcf_proto destroy race · 59eb87cb
      John Hurley authored
      When a new filter is added to cls_api, the function
      tcf_chain_tp_insert_unique() looks up the protocol/priority/chain to
      determine if the tcf_proto is duplicated in the chain's hashtable. It then
      creates a new entry or continues with an existing one. In cls_flower, this
      allows the function fl_ht_insert_unque to determine if a filter is a
      duplicate and reject appropriately, meaning that the duplicate will not be
      passed to drivers via the offload hooks. However, when a tcf_proto is
      destroyed it is removed from its chain before a hardware remove hook is
      hit. This can lead to a race whereby the driver has not received the
      remove message but duplicate flows can be accepted. This, in turn, can
      lead to the offload driver receiving incorrect duplicate flows and out of
      order add/delete messages.
      
      Prevent duplicates by utilising an approach suggested by Vlad Buslov. A
      hash table per block stores each unique chain/protocol/prio being
      destroyed. This entry is only removed when the full destroy (and hardware
      offload) has completed. If a new flow is being added with the same
      identiers as a tc_proto being detroyed, then the add request is replayed
      until the destroy is complete.
      
      Fixes: 8b64678e ("net: sched: refactor tp insert/delete for concurrent execution")
      Signed-off-by: default avatarJohn Hurley <john.hurley@netronome.com>
      Signed-off-by: default avatarVlad Buslov <vladbu@mellanox.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
      Reported-by: default avatarLouis Peens <louis.peens@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      59eb87cb
    • Nishad Kamdar's avatar
      net: hns3: Use the correct style for SPDX License Identifier · 2ef17216
      Nishad Kamdar authored
      This patch corrects the SPDX License Identifier style in
      header files related to Hisilicon network devices. For C header files
      Documentation/process/license-rules.rst mandates C-like comments
      (opposed to C source files where C++ style should be used)
      
      Changes made by using a script provided by Joe Perches here:
      https://lkml.org/lkml/2019/2/7/46.
      Suggested-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarNishad Kamdar <nishadkamdar@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2ef17216
    • Jay Vosburgh's avatar
      bonding: fix state transition issue in link monitoring · 1899bb32
      Jay Vosburgh authored
      Since de77ecd4 ("bonding: improve link-status update in
      mii-monitoring"), the bonding driver has utilized two separate variables
      to indicate the next link state a particular slave should transition to.
      Each is used to communicate to a different portion of the link state
      change commit logic; one to the bond_miimon_commit function itself, and
      another to the state transition logic.
      
      	Unfortunately, the two variables can become unsynchronized,
      resulting in incorrect link state transitions within bonding.  This can
      cause slaves to become stuck in an incorrect link state until a
      subsequent carrier state transition.
      
      	The issue occurs when a special case in bond_slave_netdev_event
      sets slave->link directly to BOND_LINK_FAIL.  On the next pass through
      bond_miimon_inspect after the slave goes carrier up, the BOND_LINK_FAIL
      case will set the proposed next state (link_new_state) to BOND_LINK_UP,
      but the new_link to BOND_LINK_DOWN.  The setting of the final link state
      from new_link comes after that from link_new_state, and so the slave
      will end up incorrectly in _DOWN state.
      
      	Resolve this by combining the two variables into one.
      Reported-by: default avatarAleksei Zakharov <zakharov.a.g@yandex.ru>
      Reported-by: default avatarSha Zhang <zhangsha.zhang@huawei.com>
      Cc: Mahesh Bandewar <maheshb@google.com>
      Fixes: de77ecd4 ("bonding: improve link-status update in mii-monitoring")
      Signed-off-by: default avatarJay Vosburgh <jay.vosburgh@canonical.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1899bb32
    • David S. Miller's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf · 41de23e2
      David S. Miller authored
      Daniel Borkmann says:
      
      ====================
      pull-request: bpf 2019-11-02
      
      The following pull-request contains BPF updates for your *net* tree.
      
      We've added 6 non-merge commits during the last 6 day(s) which contain
      a total of 8 files changed, 35 insertions(+), 9 deletions(-).
      
      The main changes are:
      
      1) Fix ppc BPF JIT's tail call implementation by performing a second pass
         to gather a stable JIT context before opcode emission, from Eric Dumazet.
      
      2) Fix build of BPF samples sys_perf_event_open() usage to compiled out
         unavailable test_attr__{enabled,open} checks. Also fix potential overflows
         in bpf_map_{area_alloc,charge_init} on 32 bit archs, from Björn Töpel.
      
      3) Fix narrow loads of bpf_sysctl context fields with offset > 0 on big endian
         archs like s390x and also improve the test coverage, from Ilya Leoshkevich.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      41de23e2
  2. 05 Nov, 2019 4 commits
    • Ivan Khoronzhuk's avatar
      taprio: fix panic while hw offload sched list swap · 0763b3e8
      Ivan Khoronzhuk authored
      Don't swap oper and admin schedules too early, it's not correct and
      causes crash.
      
      Steps to reproduce:
      
      1)
      tc qdisc replace dev eth0 parent root handle 100 taprio \
          num_tc 3 \
          map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 \
          queues 1@0 1@1 1@2 \
          base-time $SOME_BASE_TIME \
          sched-entry S 01 80000 \
          sched-entry S 02 15000 \
          sched-entry S 04 40000 \
          flags 2
      
      2)
      tc qdisc replace dev eth0 parent root handle 100 taprio \
          base-time $SOME_BASE_TIME \
          sched-entry S 01 90000 \
          sched-entry S 02 20000 \
          sched-entry S 04 40000 \
          flags 2
      
      3)
      tc qdisc replace dev eth0 parent root handle 100 taprio \
          base-time $SOME_BASE_TIME \
          sched-entry S 01 150000 \
          sched-entry S 02 200000 \
          sched-entry S 04 40000 \
          flags 2
      
      Do 2 3 2 .. steps  more times if not happens and observe:
      
      [  305.832319] Unable to handle kernel write to read-only memory at
      virtual address ffff0000087ce7f0
      [  305.910887] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
      [  305.919306] Hardware name: Texas Instruments AM654 Base Board (DT)
      
      [...]
      
      [  306.017119] x1 : ffff800848031d88 x0 : ffff800848031d80
      [  306.022422] Call trace:
      [  306.024866]  taprio_free_sched_cb+0x4c/0x98
      [  306.029040]  rcu_process_callbacks+0x25c/0x410
      [  306.033476]  __do_softirq+0x10c/0x208
      [  306.037132]  irq_exit+0xb8/0xc8
      [  306.040267]  __handle_domain_irq+0x64/0xb8
      [  306.044352]  gic_handle_irq+0x7c/0x178
      [  306.048092]  el1_irq+0xb0/0x128
      [  306.051227]  arch_cpu_idle+0x10/0x18
      [  306.054795]  do_idle+0x120/0x138
      [  306.058015]  cpu_startup_entry+0x20/0x28
      [  306.061931]  rest_init+0xcc/0xd8
      [  306.065154]  start_kernel+0x3bc/0x3e4
      [  306.068810] Code: f2fbd5b7 f2fbd5b6 d503201f f9400422 (f9000662)
      [  306.074900] ---[ end trace 96c8e2284a9d9d6e ]---
      [  306.079507] Kernel panic - not syncing: Fatal exception in interrupt
      [  306.085847] SMP: stopping secondary CPUs
      [  306.089765] Kernel Offset: disabled
      
      Try to explain one of the possible crash cases:
      
      The "real" admin list is assigned when admin_sched is set to
      new_admin, it happens after "swap", that assigns to oper_sched NULL.
      Thus if call qdisc show it can crash.
      
      Farther, next second time, when sched list is updated, the admin_sched
      is not NULL and becomes the oper_sched, previous oper_sched was NULL so
      just skipped. But then admin_sched is assigned new_admin, but schedules
      to free previous assigned admin_sched (that already became oper_sched).
      
      Farther, next third time, when sched list is updated,
      while one more swap, oper_sched is not null, but it was happy to be
      freed already (while prev. admin update), so while try to free
      oper_sched the kernel panic happens at taprio_free_sched_cb().
      
      So, move the "swap emulation" where it should be according to function
      comment from code.
      
      Fixes: 9c66d156 ("taprio: Add support for hardware offloading")
      Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
      Acked-by: default avatarVinicius Costa Gomes <vinicius.gomes@intel.com>
      Tested-by: default avatarVladimir Oltean <olteanv@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0763b3e8
    • David S. Miller's avatar
      Merge tag 'linux-can-fixes-for-5.4-20191105' of... · fc564e09
      David S. Miller authored
      Merge tag 'linux-can-fixes-for-5.4-20191105' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can
      
      Marc Kleine-Budde says:
      
      ====================
      pull-request: can 2019-11-05
      
      this is a pull request of 33 patches for net/master.
      
      In the first patch Wen Yang's patch adds a missing of_node_put() to CAN device
      infrastructure.
      
      Navid Emamdoost's patch for the gs_usb driver fixes a memory leak in the
      gs_can_open() error path.
      
      Johan Hovold provides two patches, one for the mcba_usb, the other for the
      usb_8dev driver. Both fix a use-after-free after USB-disconnect.
      
      Joakim Zhang's patch improves the flexcan driver, the ECC mechanism is now
      completely disabled instead of masking the interrupts.
      
      The next three patches all target the peak_usb driver. Stephane Grosjean's
      patch fixes a potential out-of-sync while decoding packets, Johan Hovold's
      patch fixes a slab info leak, Jeroen Hofstee's patch adds missing reporting of
      bus off recovery events.
      
      Followed by three patches for the c_can driver. Kurt Van Dijck's patch fixes
      detection of potential missing status IRQs, Jeroen Hofstee's patches add a chip
      reset on open and add missing reporting of bus off recovery events.
      
      Appana Durga Kedareswara rao's patch for the xilinx driver fixes the flags
      field initialization for axi CAN.
      
      The next seven patches target the rx-offload helper, they are by me and Jeroen
      Hofstee. The error handling in case of a queue overflow is fixed removing a
      memory leak. Further the error handling in case of queue overflow and skb OOM
      is cleaned up.
      
      The next two patches are by me and target the flexcan and ti_hecc driver. In
      case of a error during can_rx_offload_queue_sorted() the error counters in the
      drivers are incremented.
      
      Jeroen Hofstee provides 6 patches for the ti_hecc driver, which properly stop
      the device in ifdown, improve the rx-offload support (which hit mainline in
      v5.4-rc1), and add missing FIFO overflow and state change reporting.
      
      The following four patches target the j1939 protocol. Colin Ian King's patch
      fixes a memory leak in the j1939_sk_errqueue() handling. Three patches by
      Oleksij Rempel fix a memory leak on socket release and fix the EOMA packet in
      the transport protocol.
      
      Timo Schlüßler's patch fixes a potential race condition in the mcp251x driver
      on after suspend.
      
      The last patch is by Yegor Yefremov and updates the SPDX-License-Identifier to
      v3.0.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fc564e09
    • Yegor Yefremov's avatar
      can: don't use deprecated license identifiers · 3926a3a0
      Yegor Yefremov authored
      The "GPL-2.0" license identifier changed to "GPL-2.0-only" in SPDX v3.0.
      Signed-off-by: default avatarYegor Yefremov <yegorslists@googlemail.com>
      Acked-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      3926a3a0
    • Timo Schlüßler's avatar
      can: mcp251x: mcp251x_restart_work_handler(): Fix potential force_quit race condition · 27a0e54b
      Timo Schlüßler authored
      In mcp251x_restart_work_handler() the variable to stop the interrupt
      handler (priv->force_quit) is reset after the chip is restarted and thus
      a interrupt might occur.
      
      This patch fixes the potential race condition by resetting force_quit
      before enabling interrupts.
      Signed-off-by: default avatarTimo Schlüßler <schluessler@krause.de>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      27a0e54b
  3. 04 Nov, 2019 32 commits