1. 05 1月, 2022 2 次提交
    • D
      i40e: fix use-after-free in i40e_sync_filters_subtask() · 3116f59c
      Di Zhu 提交于
      Using ifconfig command to delete the ipv6 address will cause
      the i40e network card driver to delete its internal mac_filter and
      i40e_service_task kernel thread will concurrently access the mac_filter.
      These two processes are not protected by lock
      so causing the following use-after-free problems.
      
       print_address_description+0x70/0x360
       ? vprintk_func+0x5e/0xf0
       kasan_report+0x1b2/0x330
       i40e_sync_vsi_filters+0x4f0/0x1850 [i40e]
       i40e_sync_filters_subtask+0xe3/0x130 [i40e]
       i40e_service_task+0x195/0x24c0 [i40e]
       process_one_work+0x3f5/0x7d0
       worker_thread+0x61/0x6c0
       ? process_one_work+0x7d0/0x7d0
       kthread+0x1c3/0x1f0
       ? kthread_park+0xc0/0xc0
       ret_from_fork+0x35/0x40
      
      Allocated by task 2279810:
       kasan_kmalloc+0xa0/0xd0
       kmem_cache_alloc_trace+0xf3/0x1e0
       i40e_add_filter+0x127/0x2b0 [i40e]
       i40e_add_mac_filter+0x156/0x190 [i40e]
       i40e_addr_sync+0x2d/0x40 [i40e]
       __hw_addr_sync_dev+0x154/0x210
       i40e_set_rx_mode+0x6d/0xf0 [i40e]
       __dev_set_rx_mode+0xfb/0x1f0
       __dev_mc_add+0x6c/0x90
       igmp6_group_added+0x214/0x230
       __ipv6_dev_mc_inc+0x338/0x4f0
       addrconf_join_solict.part.7+0xa2/0xd0
       addrconf_dad_work+0x500/0x980
       process_one_work+0x3f5/0x7d0
       worker_thread+0x61/0x6c0
       kthread+0x1c3/0x1f0
       ret_from_fork+0x35/0x40
      
      Freed by task 2547073:
       __kasan_slab_free+0x130/0x180
       kfree+0x90/0x1b0
       __i40e_del_filter+0xa3/0xf0 [i40e]
       i40e_del_mac_filter+0xf3/0x130 [i40e]
       i40e_addr_unsync+0x85/0xa0 [i40e]
       __hw_addr_sync_dev+0x9d/0x210
       i40e_set_rx_mode+0x6d/0xf0 [i40e]
       __dev_set_rx_mode+0xfb/0x1f0
       __dev_mc_del+0x69/0x80
       igmp6_group_dropped+0x279/0x510
       __ipv6_dev_mc_dec+0x174/0x220
       addrconf_leave_solict.part.8+0xa2/0xd0
       __ipv6_ifa_notify+0x4cd/0x570
       ipv6_ifa_notify+0x58/0x80
       ipv6_del_addr+0x259/0x4a0
       inet6_addr_del+0x188/0x260
       addrconf_del_ifaddr+0xcc/0x130
       inet6_ioctl+0x152/0x190
       sock_do_ioctl+0xd8/0x2b0
       sock_ioctl+0x2e5/0x4c0
       do_vfs_ioctl+0x14e/0xa80
       ksys_ioctl+0x7c/0xa0
       __x64_sys_ioctl+0x42/0x50
       do_syscall_64+0x98/0x2c0
       entry_SYSCALL_64_after_hwframe+0x65/0xca
      
      Fixes: 41c445ff ("i40e: main driver core")
      Signed-off-by: NDi Zhu <zhudi2@huawei.com>
      Signed-off-by: NRui Zhang <zhangrui182@huawei.com>
      Tested-by: NGurucharan G <gurucharanx.g@intel.com>
      Signed-off-by: NTony Nguyen <anthony.l.nguyen@intel.com>
      3116f59c
    • M
      i40e: Fix to not show opcode msg on unsuccessful VF MAC change · 01cbf508
      Mateusz Palczewski 提交于
      Hide i40e opcode information sent during response to VF in case when
      untrusted VF tried to change MAC on the VF interface.
      
      This is implemented by adding an additional parameter 'hide' to the
      response sent to VF function that hides the display of error
      information, but forwards the error code to VF.
      
      Previously it was not possible to send response with some error code
      to VF without displaying opcode information.
      
      Fixes: 5c3c48ac ("i40e: implement virtual device interface")
      Signed-off-by: NGrzegorz Szczurek <grzegorzx.szczurek@intel.com>
      Signed-off-by: NMateusz Palczewski <mateusz.palczewski@intel.com>
      Reviewed-by: NPaul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
      Reviewed-by: NAleksandr Loktionov <aleksandr.loktionov@intel.com>
      Tested-by: NTony Brelinski <tony.brelinski@intel.com>
      Signed-off-by: NTony Nguyen <anthony.l.nguyen@intel.com>
      01cbf508
  2. 04 1月, 2022 1 次提交
  3. 03 1月, 2022 2 次提交
    • M
      net/fsl: Remove leftover definition in xgmac_mdio · 1ef5e1d0
      Markus Koch 提交于
      commit 26eee021 ("net/fsl: fix a bug in xgmac_mdio") fixed a bug in
      the QorIQ mdio driver but left the (now unused) incorrect bit definition
      for MDIO_DATA_BSY in the code. This commit removes it.
      Signed-off-by: NMarkus Koch <markus@notsyncing.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1ef5e1d0
    • T
      rndis_host: support Hytera digital radios · 29262e1f
      Thomas Toye 提交于
      Hytera makes a range of digital (DMR) radios. These radios can be
      programmed to a allow a computer to control them over Ethernet over USB,
      either using NCM or RNDIS.
      
      This commit adds support for RNDIS for Hytera radios. I tested with a
      Hytera PD785 and a Hytera MD785G. When these radios are programmed to
      set up a Radio to PC Network using RNDIS, an USB interface will be added
      with class 2 (Communications), subclass 2 (Abstract Modem Control) and
      an interface protocol of 255 ("vendor specific" - lsusb even hints "MSFT
      RNDIS?").
      
      This patch is similar to the solution of this StackOverflow user, but
      that only works for the Hytera MD785:
      https://stackoverflow.com/a/53550858
      
      To use the "Radio to PC Network" functionality of Hytera DMR radios, the
      radios need to be programmed correctly in CPS (Hytera's Customer
      Programming Software). "Forward to PC" should be checked in "Network"
      (under "General Setting" in "Conventional") and the "USB Network
      Communication Protocol" should be set to RNDIS.
      Signed-off-by: NThomas Toye <thomas@toye.io>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      29262e1f
  4. 02 1月, 2022 3 次提交
    • A
      net: ena: Fix error handling when calculating max IO queues number · 5055dc03
      Arthur Kiyanovski 提交于
      The role of ena_calc_max_io_queue_num() is to return the number
      of queues supported by the device, which means the return value
      should be >=0.
      
      The function that calls ena_calc_max_io_queue_num(), checks
      the return value. If it is 0, it means the device reported
      it supports 0 IO queues. This case is considered an error
      and is handled by the calling function accordingly.
      
      However the current implementation of ena_calc_max_io_queue_num()
      is wrong, since when it detects the device supports 0 IO queues,
      it returns -EFAULT.
      
      In such a case the calling function doesn't detect the error,
      and therefore doesn't handle it.
      
      This commit changes ena_calc_max_io_queue_num() to return 0
      in case the device reported it supports 0 queues, allowing the
      calling function to properly handle the error case.
      
      Fixes: 736ce3f4 ("net: ena: make ethtool -l show correct max number of queues")
      Signed-off-by: NShay Agroskin <shayagr@amazon.com>
      Signed-off-by: NArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5055dc03
    • A
      net: ena: Fix wrong rx request id by resetting device · cb3d4f98
      Arthur Kiyanovski 提交于
      A wrong request id received from the device is a sign that
      something is wrong with it, therefore trigger a device reset.
      
      Also add some debug info to the "Page is NULL" print to make
      it easier to debug.
      
      Fixes: 1738cd3e ("net: ena: Add a driver for Amazon Elastic Network Adapters (ENA)")
      Signed-off-by: NArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cb3d4f98
    • A
      net: ena: Fix undefined state when tx request id is out of bounds · c255a34e
      Arthur Kiyanovski 提交于
      ena_com_tx_comp_req_id_get() checks the req_id of a received completion,
      and if it is out of bounds returns -EINVAL. This is a sign that
      something is wrong with the device and it needs to be reset.
      
      The current code does not reset the device in this case, which leaves
      the driver in an undefined state, where this completion is not properly
      handled.
      
      This commit adds a call to handle_invalid_req_id() in ena_clean_tx_irq()
      and ena_clean_xdp_irq() which resets the device to fix the issue.
      
      This commit also removes unnecessary request id checks from
      validate_tx_req_id() and validate_xdp_req_id(). This check is unneeded
      because it was already performed in ena_com_tx_comp_req_id_get(), which
      is called right before these functions.
      
      Fixes: 548c4940 ("net: ena: Implement XDP_TX action")
      Signed-off-by: NShay Agroskin <shayagr@amazon.com>
      Signed-off-by: NArthur Kiyanovski <akiyano@amazon.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c255a34e
  5. 30 12月, 2021 1 次提交
  6. 29 12月, 2021 5 次提交
  7. 28 12月, 2021 2 次提交
  8. 27 12月, 2021 2 次提交
    • M
      net: usb: pegasus: Do not drop long Ethernet frames · ca506fca
      Matthias-Christian Ott 提交于
      The D-Link DSB-650TX (2001:4002) is unable to receive Ethernet frames
      that are longer than 1518 octets, for example, Ethernet frames that
      contain 802.1Q VLAN tags.
      
      The frames are sent to the pegasus driver via USB but the driver
      discards them because they have the Long_pkt field set to 1 in the
      received status report. The function read_bulk_callback of the pegasus
      driver treats such received "packets" (in the terminology of the
      hardware) as errors but the field simply does just indicate that the
      Ethernet frame (MAC destination to FCS) is longer than 1518 octets.
      
      It seems that in the 1990s there was a distinction between
      "giant" (> 1518) and "runt" (< 64) frames and the hardware includes
      flags to indicate this distinction. It seems that the purpose of the
      distinction "giant" frames was to not allow infinitely long frames due
      to transmission errors and to allow hardware to have an upper limit of
      the frame size. However, the hardware already has such limit with its
      2048 octet receive buffer and, therefore, Long_pkt is merely a
      convention and should not be treated as a receive error.
      
      Actually, the hardware is even able to receive Ethernet frames with 2048
      octets which exceeds the claimed limit frame size limit of the driver of
      1536 octets (PEGASUS_MTU).
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Signed-off-by: NMatthias-Christian Ott <ott@mirix.org>
      Reviewed-by: NAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ca506fca
    • Z
      atlantic: Fix buff_ring OOB in aq_ring_rx_clean · 5f501532
      Zekun Shen 提交于
      The function obtain the next buffer without boundary check.
      We should return with I/O error code.
      
      The bug is found by fuzzing and the crash report is attached.
      It is an OOB bug although reported as use-after-free.
      
      [    4.804724] BUG: KASAN: use-after-free in aq_ring_rx_clean+0x1e88/0x2730 [atlantic]
      [    4.805661] Read of size 4 at addr ffff888034fe93a8 by task ksoftirqd/0/9
      [    4.806505]
      [    4.806703] CPU: 0 PID: 9 Comm: ksoftirqd/0 Tainted: G        W         5.6.0 #34
      [    4.809030] Call Trace:
      [    4.809343]  dump_stack+0x76/0xa0
      [    4.809755]  print_address_description.constprop.0+0x16/0x200
      [    4.810455]  ? aq_ring_rx_clean+0x1e88/0x2730 [atlantic]
      [    4.811234]  ? aq_ring_rx_clean+0x1e88/0x2730 [atlantic]
      [    4.813183]  __kasan_report.cold+0x37/0x7c
      [    4.813715]  ? aq_ring_rx_clean+0x1e88/0x2730 [atlantic]
      [    4.814393]  kasan_report+0xe/0x20
      [    4.814837]  aq_ring_rx_clean+0x1e88/0x2730 [atlantic]
      [    4.815499]  ? hw_atl_b0_hw_ring_rx_receive+0x9a5/0xb90 [atlantic]
      [    4.816290]  aq_vec_poll+0x179/0x5d0 [atlantic]
      [    4.816870]  ? _GLOBAL__sub_I_65535_1_aq_pci_func_init+0x20/0x20 [atlantic]
      [    4.817746]  ? __next_timer_interrupt+0xba/0xf0
      [    4.818322]  net_rx_action+0x363/0xbd0
      [    4.818803]  ? call_timer_fn+0x240/0x240
      [    4.819302]  ? __switch_to_asm+0x40/0x70
      [    4.819809]  ? napi_busy_loop+0x520/0x520
      [    4.820324]  __do_softirq+0x18c/0x634
      [    4.820797]  ? takeover_tasklets+0x5f0/0x5f0
      [    4.821343]  run_ksoftirqd+0x15/0x20
      [    4.821804]  smpboot_thread_fn+0x2f1/0x6b0
      [    4.822331]  ? smpboot_unregister_percpu_thread+0x160/0x160
      [    4.823041]  ? __kthread_parkme+0x80/0x100
      [    4.823571]  ? smpboot_unregister_percpu_thread+0x160/0x160
      [    4.824301]  kthread+0x2b5/0x3b0
      [    4.824723]  ? kthread_create_on_node+0xd0/0xd0
      [    4.825304]  ret_from_fork+0x35/0x40
      Signed-off-by: NZekun Shen <bruceshenzk@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5f501532
  9. 25 12月, 2021 1 次提交
  10. 24 12月, 2021 5 次提交
    • N
      net: stmmac: dwmac-visconti: Fix value of ETHER_CLK_SEL_FREQ_SEL_2P5M · 391e5975
      Nobuhiro Iwamatsu 提交于
      ETHER_CLK_SEL_FREQ_SEL_2P5M is not 0 bit of the register. This is a
      value, which is 0. Fix from BIT(0) to 0.
      Reported-by: NYuji Ishikawa <yuji2.ishikawa@toshiba.co.jp>
      Fixes: b38dd98f ("net: stmmac: Add Toshiba Visconti SoCs glue driver")
      Signed-off-by: NNobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
      Link: https://lore.kernel.org/r/20211223073633.101306-1-nobuhiro1.iwamatsu@toshiba.co.jpSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      391e5975
    • H
      r8152: sync ocp base · b24edca3
      Hayes Wang 提交于
      There are some chances that the actual base of hardware is different
      from the value recorded by driver, so we have to reset the variable
      of ocp_base to sync it.
      
      Set ocp_base to -1. Then, it would be updated and the new base would be
      set to the hardware next time.
      Signed-off-by: NHayes Wang <hayeswang@realtek.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      b24edca3
    • H
      r8152: fix the force speed doesn't work for RTL8156 · 45bf944e
      Hayes Wang 提交于
      It needs to set mdio force mode. Otherwise, link off always occurs when
      setting force speed.
      
      Fixes: 195aae32 ("r8152: support new chips")
      Signed-off-by: NHayes Wang <hayeswang@realtek.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      45bf944e
    • X
      net: stmmac: ptp: fix potentially overflowing expression · eccffcf4
      Xiaoliang Yang 提交于
      Convert the u32 variable to type u64 in a context where expression of
      type u64 is required to avoid potential overflow.
      
      Fixes: e9e37200 ("net: stmmac: ptp: update tas basetime after ptp adjust")
      Signed-off-by: NXiaoliang Yang <xiaoliang.yang_1@nxp.com>
      Link: https://lore.kernel.org/r/20211223073928.37371-1-xiaoliang.yang_1@nxp.comSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      eccffcf4
    • P
      veth: ensure skb entering GRO are not cloned. · 9695b7de
      Paolo Abeni 提交于
      After commit d3256efd ("veth: allow enabling NAPI even without XDP"),
      if GRO is enabled on a veth device and TSO is disabled on the peer
      device, TCP skbs will go through the NAPI callback. If there is no XDP
      program attached, the veth code does not perform any share check, and
      shared/cloned skbs could enter the GRO engine.
      
      Ignat reported a BUG triggered later-on due to the above condition:
      
      [   53.970529][    C1] kernel BUG at net/core/skbuff.c:3574!
      [   53.981755][    C1] invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
      [   53.982634][    C1] CPU: 1 PID: 19 Comm: ksoftirqd/1 Not tainted 5.16.0-rc5+ #25
      [   53.982634][    C1] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      [   53.982634][    C1] RIP: 0010:skb_shift+0x13ef/0x23b0
      [   53.982634][    C1] Code: ea 03 0f b6 04 02 48 89 fa 83 e2 07 38 d0
      7f 08 84 c0 0f 85 41 0c 00 00 41 80 7f 02 00 4d 8d b5 d0 00 00 00 0f
      85 74 f5 ff ff <0f> 0b 4d 8d 77 20 be 04 00 00 00 4c 89 44 24 78 4c 89
      f7 4c 89 8c
      [   53.982634][    C1] RSP: 0018:ffff8881008f7008 EFLAGS: 00010246
      [   53.982634][    C1] RAX: 0000000000000000 RBX: ffff8881180b4c80 RCX: 0000000000000000
      [   53.982634][    C1] RDX: 0000000000000002 RSI: ffff8881180b4d3c RDI: ffff88810bc9cac2
      [   53.982634][    C1] RBP: ffff8881008f70b8 R08: ffff8881180b4cf4 R09: ffff8881180b4cf0
      [   53.982634][    C1] R10: ffffed1022999e5c R11: 0000000000000002 R12: 0000000000000590
      [   53.982634][    C1] R13: ffff88810f940c80 R14: ffff88810f940d50 R15: ffff88810bc9cac0
      [   53.982634][    C1] FS:  0000000000000000(0000) GS:ffff888235880000(0000) knlGS:0000000000000000
      [   53.982634][    C1] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   53.982634][    C1] CR2: 00007ff5f9b86680 CR3: 0000000108ce8004 CR4: 0000000000170ee0
      [   53.982634][    C1] Call Trace:
      [   53.982634][    C1]  <TASK>
      [   53.982634][    C1]  tcp_sacktag_walk+0xaba/0x18e0
      [   53.982634][    C1]  tcp_sacktag_write_queue+0xe7b/0x3460
      [   53.982634][    C1]  tcp_ack+0x2666/0x54b0
      [   53.982634][    C1]  tcp_rcv_established+0x4d9/0x20f0
      [   53.982634][    C1]  tcp_v4_do_rcv+0x551/0x810
      [   53.982634][    C1]  tcp_v4_rcv+0x22ed/0x2ed0
      [   53.982634][    C1]  ip_protocol_deliver_rcu+0x96/0xaf0
      [   53.982634][    C1]  ip_local_deliver_finish+0x1e0/0x2f0
      [   53.982634][    C1]  ip_sublist_rcv_finish+0x211/0x440
      [   53.982634][    C1]  ip_list_rcv_finish.constprop.0+0x424/0x660
      [   53.982634][    C1]  ip_list_rcv+0x2c8/0x410
      [   53.982634][    C1]  __netif_receive_skb_list_core+0x65c/0x910
      [   53.982634][    C1]  netif_receive_skb_list_internal+0x5f9/0xcb0
      [   53.982634][    C1]  napi_complete_done+0x188/0x6e0
      [   53.982634][    C1]  gro_cell_poll+0x10c/0x1d0
      [   53.982634][    C1]  __napi_poll+0xa1/0x530
      [   53.982634][    C1]  net_rx_action+0x567/0x1270
      [   53.982634][    C1]  __do_softirq+0x28a/0x9ba
      [   53.982634][    C1]  run_ksoftirqd+0x32/0x60
      [   53.982634][    C1]  smpboot_thread_fn+0x559/0x8c0
      [   53.982634][    C1]  kthread+0x3b9/0x490
      [   53.982634][    C1]  ret_from_fork+0x22/0x30
      [   53.982634][    C1]  </TASK>
      
      Address the issue by skipping the GRO stage for shared or cloned skbs.
      To reduce the chance of OoO, try to unclone the skbs before giving up.
      
      v1 -> v2:
       - use avoid skb_copy and fallback to netif_receive_skb  - Eric
      Reported-by: NIgnat Korchagin <ignat@cloudflare.com>
      Fixes: d3256efd ("veth: allow enabling NAPI even without XDP")
      Signed-off-by: NPaolo Abeni <pabeni@redhat.com>
      Tested-by: NIgnat Korchagin <ignat@cloudflare.com>
      Reviewed-by: NEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/b5f61c5602aab01bac8d711d8d1bfab0a4817db7.1640197544.git.pabeni@redhat.comSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      9695b7de
  11. 23 12月, 2021 16 次提交