Skip to content
  1. Jan 01, 2024
    • Shengjiu Wang's avatar
      ASoC: fsl_sai: Fix channel swap issue on i.MX8MP · fb0f25c8
      Shengjiu Wang authored
      [ Upstream commit 8f0f0164 ]
      
      When flag mclk_with_tere and mclk_direction_output enabled,
      The SAI transmitter or receiver will be enabled in very early
      stage, that if FSL_SAI_xMR is set by previous case,
      for example previous case is one channel, current case is
      two channels, then current case started with wrong xMR in
      the beginning, then channel swap happen.
      
      The patch is to clear xMR in hw_free() to avoid such
      channel swap issue.
      
      Fixes: 3e4a8261
      
       ("ASoC: fsl_sai: MCLK bind with TX/RX enable bit")
      Signed-off-by: default avatarShengjiu Wang <shengjiu.wang@nxp.com>
      Reviewed-by: default avatarDaniel Baluta <daniel.baluta@nxp.com>
      Link: https://msgid.link/r/1702953057-4499-1-git-send-email-shengjiu.wang@nxp.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fb0f25c8
    • Jerome Brunet's avatar
      ASoC: hdmi-codec: fix missing report for jack initial status · b965c22e
      Jerome Brunet authored
      [ Upstream commit 025222a9 ]
      
      This fixes a problem introduced while fixing ELD reporting with no jack
      set.
      
      Most driver using the hdmi-codec will call the 'plugged_cb' callback
      directly when registered to report the initial state of the HDMI connector.
      
      With the commit mentionned, this occurs before jack is ready and the
      initial report is lost for platforms actually providing a jack for HDMI.
      
      Fix this by storing the hdmi connector status regardless of jack being set
      or not and report the last status when jack gets set.
      
      With this, the initial state is reported correctly even if it is
      disconnected. This was not done initially and is also a fix.
      
      Fixes: 15be353d
      
       ("ASoC: hdmi-codec: register hpd callback on component probe")
      Reported-by: default avatarZhengqiao Xia <xiazhengqiao@huaqin.corp-partner.google.com>
      Closes: https://lore.kernel.org/alsa-devel/CADYyEwTNyY+fR9SgfDa-g6iiDwkU3MUdPVCYexs2_3wbcM8_vg@mail.gmail.com/
      Cc: Hsin-Yi Wang <hsinyi@google.com>
      Tested-by: default avatarZhengqiao Xia <xiazhengqiao@huaqin.corp-partner.google.com>
      Signed-off-by: default avatarJerome Brunet <jbrunet@baylibre.com>
      Link: https://msgid.link/r/20231218145655.134929-1-jbrunet@baylibre.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b965c22e
    • Imre Deak's avatar
      drm/i915/mtl: Fix HDMI/DP PLL clock selection · 6472e321
      Imre Deak authored
      [ Upstream commit dbcab554 ]
      
      Select the HDMI specific PLL clock only for HDMI outputs.
      
      Fixes: 62618c7f
      
       ("drm/i915/mtl: C20 PLL programming")
      Cc: Mika Kahola <mika.kahola@intel.com>
      Cc: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
      Reviewed-by: default avatarRadhakrishna Sripada <radhakrishna.sripada@intel.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231213220526.1828827-1-imre.deak@intel.com
      (cherry picked from commit 937d02cc
      
      )
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6472e321
    • Karthik Poosa's avatar
      drm/i915/hwmon: Fix static analysis tool reported issues · 80419c96
      Karthik Poosa authored
      [ Upstream commit 768f17fd ]
      
      Updated i915 hwmon with fixes for issues reported by static analysis tool.
      Fixed integer overflow with upcasting.
      
      v2:
      - Added Fixes tag (Badal).
      - Updated commit message as per review comments (Anshuman).
      
      Fixes: 4c2572fe
      
       ("drm/i915/hwmon: Expose power1_max_interval")
      Reviewed-by: default avatarBadal Nilawar <badal.nilawar@intel.com>
      Reviewed-by: default avatarAnshuman Gupta <anshuman.gupta@intel.com>
      Signed-off-by: default avatarKarthik Poosa <karthik.poosa@intel.com>
      Signed-off-by: default avatarAnshuman Gupta <anshuman.gupta@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231204144809.1518704-1-karthik.poosa@intel.com
      (cherry picked from commit ac3420d3
      
      )
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      80419c96
    • David Howells's avatar
      afs: Fix use-after-free due to get/remove race in volume tree · c3215484
      David Howells authored
      [ Upstream commit 9a6b294a ]
      
      When an afs_volume struct is put, its refcount is reduced to 0 before
      the cell->volume_lock is taken and the volume removed from the
      cell->volumes tree.
      
      Unfortunately, this means that the lookup code can race and see a volume
      with a zero ref in the tree, resulting in a use-after-free:
      
          refcount_t: addition on 0; use-after-free.
          WARNING: CPU: 3 PID: 130782 at lib/refcount.c:25 refcount_warn_saturate+0x7a/0xda
          ...
          RIP: 0010:refcount_warn_saturate+0x7a/0xda
          ...
          Call Trace:
           afs_get_volume+0x3d/0x55
           afs_create_volume+0x126/0x1de
           afs_validate_fc+0xfe/0x130
           afs_get_tree+0x20/0x2e5
           vfs_get_tree+0x1d/0xc9
           do_new_mount+0x13b/0x22e
           do_mount+0x5d/0x8a
           __do_sys_mount+0x100/0x12a
           do_syscall_64+0x3a/0x94
           entry_SYSCALL_64_after_hwframe+0x62/0x6a
      
      Fix this by:
      
       (1) When putting, use a flag to indicate if the volume has been removed
           from the tree and skip the rb_erase if it has.
      
       (2) When looking up, use a conditional ref increment and if it fails
           because the refcount is 0, replace the node in the tree and set the
           removal flag.
      
      Fixes: 20325960
      
       ("afs: Reorganise volume and server trees to be rooted on the cell")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Reviewed-by: default avatarJeffrey Altman <jaltman@auristor.com>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: linux-afs@lists.infradead.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c3215484
    • David Howells's avatar
      afs: Fix overwriting of result of DNS query · 81fc8dce
      David Howells authored
      [ Upstream commit a9e01ac8 ]
      
      In afs_update_cell(), ret is the result of the DNS lookup and the errors
      are to be handled by a switch - however, the value gets clobbered in
      between by setting it to -ENOMEM in case afs_alloc_vlserver_list()
      fails.
      
      Fix this by moving the setting of -ENOMEM into the error handling for
      OOM failure.  Further, only do it if we don't have an alternative error
      to return.
      
      Found by Linux Verification Center (linuxtesting.org) with SVACE.  Based
      on a patch from Anastasia Belova [1].
      
      Fixes: d5c32c89
      
       ("afs: Fix cell DNS lookup")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Reviewed-by: default avatarJeffrey Altman <jaltman@auristor.com>
      cc: Anastasia Belova <abelova@astralinux.ru>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: linux-afs@lists.infradead.org
      cc: lvc-project@linuxtesting.org
      Link: https://lore.kernel.org/r/20231221085849.1463-1-abelova@astralinux.ru/ [1]
      Link: https://lore.kernel.org/r/1700862.1703168632@warthog.procyon.org.uk/ # v1
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      81fc8dce
    • David Howells's avatar
      keys, dns: Allow key types (eg. DNS) to be reclaimed immediately on expiry · afc360e8
      David Howells authored
      [ Upstream commit 39299bdd ]
      
      If a key has an expiration time, then when that time passes, the key is
      left around for a certain amount of time before being collected (5 mins by
      default) so that EKEYEXPIRED can be returned instead of ENOKEY.  This is a
      problem for DNS keys because we want to redo the DNS lookup immediately at
      that point.
      
      Fix this by allowing key types to be marked such that keys of that type
      don't have this extra period, but are reclaimed as soon as they expire and
      turn this on for dns_resolver-type keys.  To make this easier to handle,
      key->expiry is changed to be permanent if TIME64_MAX rather than 0.
      
      Furthermore, give such new-style negative DNS results a 1s default expiry
      if no other expiry time is set rather than allowing it to stick around
      indefinitely.  This shouldn't be zero as ls will follow a failing stat call
      immediately with a second with AT_SYMLINK_NOFOLLOW added.
      
      Fixes: 1a4240f4
      
       ("DNS: Separate out CIFS DNS Resolver code")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Tested-by: default avatarMarkus Suvanto <markus.suvanto@gmail.com>
      cc: Wang Lei <wang840925@gmail.com>
      cc: Jeff Layton <jlayton@redhat.com>
      cc: Steve French <smfrench@gmail.com>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: Jarkko Sakkinen <jarkko@kernel.org>
      cc: "David S. Miller" <davem@davemloft.net>
      cc: Eric Dumazet <edumazet@google.com>
      cc: Jakub Kicinski <kuba@kernel.org>
      cc: Paolo Abeni <pabeni@redhat.com>
      cc: linux-afs@lists.infradead.org
      cc: linux-cifs@vger.kernel.org
      cc: linux-nfs@vger.kernel.org
      cc: ceph-devel@vger.kernel.org
      cc: keyrings@vger.kernel.org
      cc: netdev@vger.kernel.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      afc360e8
    • Eric Dumazet's avatar
      net: check dev->gso_max_size in gso_features_check() · 449f9d84
      Eric Dumazet authored
      [ Upstream commit 24ab059d ]
      
      Some drivers might misbehave if TSO packets get too big.
      
      GVE for instance uses a 16bit field in its TX descriptor,
      and will do bad things if a packet is bigger than 2^16 bytes.
      
      Linux TCP stack honors dev->gso_max_size, but there are
      other ways for too big packets to reach an ndo_start_xmit()
      handler : virtio_net, af_packet, GRO...
      
      Add a generic check in gso_features_check() and fallback
      to GSO when needed.
      
      gso_max_size was added in the blamed commit.
      
      Fixes: 82cc1a7a
      
       ("[NET]: Add per-connection option to set max TSO frame size")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20231219125331.4127498-1-edumazet@google.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      449f9d84
    • David Ahern's avatar
      net/ipv6: Revert remove expired routes with a separated list of routes · b577b9aa
      David Ahern authored
      [ Upstream commit dade3f6a ]
      
      This reverts commit 3dec89b1.
      
      The commit has some race conditions given how expires is managed on a
      fib6_info in relation to gc start, adding the entry to the gc list and
      setting the timer value leading to UAF. Revert the commit and try again
      in a later release.
      
      Fixes: 3dec89b1
      
       ("net/ipv6: Remove expired routes with a separated list of routes")
      Cc: Kui-Feng Lee <thinker.li@gmail.com>
      Signed-off-by: default avatarDavid Ahern <dsahern@kernel.org>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20231219030243.25687-1-dsahern@kernel.org
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b577b9aa
    • Lorenzo Bianconi's avatar
      net: ethernet: mtk_wed: fix possible NULL pointer dereference in mtk_wed_wo_queue_tx_clean() · 5c7a24ab
      Lorenzo Bianconi authored
      [ Upstream commit 7cb8cd4d ]
      
      In order to avoid a NULL pointer dereference, check entry->buf pointer before running
      skb_free_frag in mtk_wed_wo_queue_tx_clean routine.
      
      Fixes: 79968444
      
       ("net: ethernet: mtk_wed: introduce wed wo support")
      Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Link: https://lore.kernel.org/r/3c1262464d215faa8acebfc08869798c81c96f4a.1702827359.git.lorenzo@kernel.org
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5c7a24ab
    • David Howells's avatar
      afs: Fix dynamic root lookup DNS check · 3c305aa9
      David Howells authored
      [ Upstream commit 74cef687 ]
      
      In the afs dynamic root directory, the ->lookup() function does a DNS check
      on the cell being asked for and if the DNS upcall reports an error it will
      report an error back to userspace (typically ENOENT).
      
      However, if a failed DNS upcall returns a new-style result, it will return
      a valid result, with the status field set appropriately to indicate the
      type of failure - and in that case, dns_query() doesn't return an error and
      we let stat() complete with no error - which can cause confusion in
      userspace as subsequent calls that trigger d_automount then fail with
      ENOENT.
      
      Fix this by checking the status result from a valid dns_query() and
      returning an error if it indicates a failure.
      
      Fixes: bbb4c432
      
       ("dns: Allow the dns resolver to retrieve a server set")
      Reported-by: default avatarMarkus Suvanto <markus.suvanto@gmail.com>
      Closes: https://bugzilla.kernel.org/show_bug.cgi?id=216637
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Tested-by: default avatarMarkus Suvanto <markus.suvanto@gmail.com>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: linux-afs@lists.infradead.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3c305aa9
    • David Howells's avatar
      afs: Fix the dynamic root's d_delete to always delete unused dentries · 9ff7ae01
      David Howells authored
      [ Upstream commit 71f8b55b ]
      
      Fix the afs dynamic root's d_delete function to always delete unused
      dentries rather than only deleting them if they're positive.  With things
      as they stand upstream, negative dentries stemming from failed DNS lookups
      stick around preventing retries.
      
      Fixes: 66c7e1d3
      
       ("afs: Split the dynroot stuff out and give it its own ops tables")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Tested-by: default avatarMarkus Suvanto <markus.suvanto@gmail.com>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: linux-afs@lists.infradead.org
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9ff7ae01
    • Liu Jian's avatar
      net: check vlan filter feature in vlan_vids_add_by_dev() and vlan_vids_del_by_dev() · 337ca88f
      Liu Jian authored
      [ Upstream commit 01a564ba ]
      
      I got the below warning trace:
      
      WARNING: CPU: 4 PID: 4056 at net/core/dev.c:11066 unregister_netdevice_many_notify
      CPU: 4 PID: 4056 Comm: ip Not tainted 6.7.0-rc4+ #15
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
      RIP: 0010:unregister_netdevice_many_notify+0x9a4/0x9b0
      Call Trace:
       rtnl_dellink
       rtnetlink_rcv_msg
       netlink_rcv_skb
       netlink_unicast
       netlink_sendmsg
       __sock_sendmsg
       ____sys_sendmsg
       ___sys_sendmsg
       __sys_sendmsg
       do_syscall_64
       entry_SYSCALL_64_after_hwframe
      
      It can be repoduced via:
      
          ip netns add ns1
          ip netns exec ns1 ip link add bond0 type bond mode 0
          ip netns exec ns1 ip link add bond_slave_1 type veth peer veth2
          ip netns exec ns1 ip link set bond_slave_1 master bond0
      [1] ip netns exec ns1 ethtool -K bond0 rx-vlan-filter off
      [2] ip netns exec ns1 ip link add link bond_slave_1 name bond_slave_1.0 type vlan id 0
      [3] ip netns exec ns1 ip link add link bond0 name bond0.0 type vlan id 0
      [4] ip netns exec ns1 ip link set bond_slave_1 nomaster
      [5] ip netns exec ns1 ip link del veth2
          ip netns del ns1
      
      This is all caused by command [1] turning off the rx-vlan-filter function
      of bond0. The reason is the same as commit 01f4fd27 ("bonding: Fix
      incorrect deletion of ETH_P_8021AD protocol vid from slaves"). Commands
      [2] [3] add the same vid to slave and master respectively, causing
      command [4] to empty slave->vlan_info. The following command [5] triggers
      this problem.
      
      To fix this problem, we should add VLAN_FILTER feature checks in
      vlan_vids_add_by_dev() and vlan_vids_del_by_dev() to prevent incorrect
      addition or deletion of vlan_vid information.
      
      Fixes: 348a1443
      
       ("vlan: introduce functions to do mass addition/deletion of vids by another device")
      Signed-off-by: default avatarLiu Jian <liujian56@huawei.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      337ca88f
    • Yury Norov's avatar
      net: mana: select PAGE_POOL · 330fe5d5
      Yury Norov authored
      [ Upstream commit 340943fb
      
       ]
      
      Mana uses PAGE_POOL API. x86_64 defconfig doesn't select it:
      
      ld: vmlinux.o: in function `mana_create_page_pool.isra.0':
      mana_en.c:(.text+0x9ae36f): undefined reference to `page_pool_create'
      ld: vmlinux.o: in function `mana_get_rxfrag':
      mana_en.c:(.text+0x9afed1): undefined reference to `page_pool_alloc_pages'
      make[3]: *** [/home/yury/work/linux/scripts/Makefile.vmlinux:37: vmlinux] Error 1
      make[2]: *** [/home/yury/work/linux/Makefile:1154: vmlinux] Error 2
      make[1]: *** [/home/yury/work/linux/Makefile:234: __sub-make] Error 2
      make[1]: Leaving directory '/home/yury/work/build-linux-x86_64'
      make: *** [Makefile:234: __sub-make] Error 2
      
      So we need to select it explicitly.
      
      Signed-off-by: default avatarYury Norov <yury.norov@gmail.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Tested-by: Simon Horman <horms@kernel.org> # build-tested
      Fixes: ca9c54d2
      
       ("net: mana: Add a driver for Microsoft Azure Network Adapter")
      Link: https://lore.kernel.org/r/20231215203353.635379-1-yury.norov@gmail.com
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      330fe5d5
    • Larysa Zaremba's avatar
      ice: Fix PF with enabled XDP going no-carrier after reset · 79733dfc
      Larysa Zaremba authored
      [ Upstream commit f5728a41 ]
      
      Commit 6624e780 ("ice: split ice_vsi_setup into smaller
      functions") has refactored a bunch of code involved in PFR. In this
      process, TC queue number adjustment for XDP was lost. Bring it back.
      
      Lack of such adjustment causes interface to go into no-carrier after a
      reset, if XDP program is attached, with the following message:
      
      ice 0000:b1:00.0: Failed to set LAN Tx queue context, error: -22
      ice 0000:b1:00.0 ens801f0np0: Failed to open VSI 0x0006 on switch 0x0001
      ice 0000:b1:00.0: enable VSI failed, err -22, VSI index 0, type ICE_VSI_PF
      ice 0000:b1:00.0: PF VSI rebuild failed: -22
      ice 0000:b1:00.0: Rebuild failed, unload and reload driver
      
      Fixes: 6624e780
      
       ("ice: split ice_vsi_setup into smaller functions")
      Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
      Signed-off-by: default avatarLarysa Zaremba <larysa.zaremba@intel.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Tested-by: Chandan Kumar Rout <chandanx.rout@intel.com> (A Contingent Worker at Intel)
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      79733dfc
    • Dave Ertman's avatar
      ice: alter feature support check for SRIOV and LAG · fc4d6d13
      Dave Ertman authored
      [ Upstream commit 4d50fcdc ]
      
      Previously, the ice driver had support for using a handler for bonding
      netdev events to ensure that conflicting features were not allowed to be
      activated at the same time.  While this was still in place, additional
      support was added to specifically support SRIOV and LAG together.  These
      both utilized the netdev event handler, but the SRIOV and LAG feature was
      behind a capabilities feature check to make sure the current NVM has
      support.
      
      The exclusion part of the event handler should be removed since there are
      users who have custom made solutions that depend on the non-exclusion of
      features.
      
      Wrap the creation/registration and cleanup of the event handler and
      associated structs in the probe flow with a feature check so that the
      only systems that support the full implementation of LAG features will
      initialize support.  This will leave other systems unhindered with
      functionality as it existed before any LAG code was added.
      
      Fixes: bb52f42a
      
       ("ice: Add driver support for firmware changes for LAG")
      Reviewed-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
      Signed-off-by: default avatarDave Ertman <david.m.ertman@intel.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fc4d6d13
    • Jacob Keller's avatar
      ice: stop trashing VF VSI aggregator node ID information · 194e51ac
      Jacob Keller authored
      [ Upstream commit 7d881346 ]
      
      When creating new VSIs, they are assigned into an aggregator node in the
      scheduler tree. Information about which aggregator node a VSI is assigned
      into is maintained by the vsi->agg_node structure. In ice_vsi_decfg(), this
      information is being destroyed, by overwriting the valid flag and the
      agg_id field to zero.
      
      For VF VSIs, this breaks the aggregator node configuration replay, which
      depends on this information. This results in VFs being inserted into the
      default aggregator node. The resulting configuration will have unexpected
      Tx bandwidth sharing behavior.
      
      This was broken by commit 6624e780 ("ice: split ice_vsi_setup into
      smaller functions"), which added the block to reset the agg_node data.
      
      The vsi->agg_node structure is not managed by the scheduler code, but is
      instead a wrapper around an aggregator node ID that is tracked at the VSI
      layer. Its been around for a long time, and its primary purpose was for
      handling VFs. The SR-IOV VF reset flow does not make use of the standard VSI
      rebuild/replay logic, and uses vsi->agg_node as part of its handling to
      rebuild the aggregator node configuration.
      
      The logic for aggregator nodes stretches  back to early ice driver code from
      commit b126bd6b ("ice: create scheduler aggregator node config and move
      VSIs")
      
      The logic in ice_vsi_decfg() which trashes the ice_agg_node data is clearly
      wrong. It destroys information that is necessary for handling VF reset,. It
      is also not the correct way to actually remove a VSI from an aggregator
      node. For that, we need to implement logic in the scheduler code. Further,
      non-VF VSIs properly replay their aggregator configuration using existing
      scheduler replay logic.
      
      To fix the VF replay logic, remove this broken aggregator node cleanup
      logic. This is the simplest way to immediately fix this.
      
      This ensures that VFs will have proper aggregate configuration after a
      reset. This is especially important since VFs often perform resets as part
      of their reconfiguration flows. Without fixing this, VFs will be placed in
      the default aggregator node and Tx bandwidth will not be shared in the
      expected and configured manner.
      
      Fixes: 6624e780
      
       ("ice: split ice_vsi_setup into smaller functions")
      Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
      Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Tested-by: default avatarRafal Romanowski <rafal.romanowski@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      194e51ac
    • Daniel Golle's avatar
      net: phy: skip LED triggers on PHYs on SFP modules · d98ce1f0
      Daniel Golle authored
      [ Upstream commit b1dfc0f7
      
       ]
      
      Calling led_trigger_register() when attaching a PHY located on an SFP
      module potentially (and practically) leads into a deadlock.
      Fix this by not calling led_trigger_register() for PHYs localted on SFP
      modules as such modules actually never got any LEDs.
      
      ======================================================
      WARNING: possible circular locking dependency detected
      6.7.0-rc4-next-20231208+ #0 Tainted: G           O
      ------------------------------------------------------
      kworker/u8:2/43 is trying to acquire lock:
      ffffffc08108c4e8 (triggers_list_lock){++++}-{3:3}, at: led_trigger_register+0x4c/0x1a8
      
      but task is already holding lock:
      ffffff80c5c6f318 (&sfp->sm_mutex){+.+.}-{3:3}, at: cleanup_module+0x2ba8/0x3120 [sfp]
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #3 (&sfp->sm_mutex){+.+.}-{3:3}:
             __mutex_lock+0x88/0x7a0
             mutex_lock_nested+0x20/0x28
             cleanup_module+0x2ae0/0x3120 [sfp]
             sfp_register_bus+0x5c/0x9c
             sfp_register_socket+0x48/0xd4
             cleanup_module+0x271c/0x3120 [sfp]
             platform_probe+0x64/0xb8
             really_probe+0x17c/0x3c0
             __driver_probe_device+0x78/0x164
             driver_probe_device+0x3c/0xd4
             __driver_attach+0xec/0x1f0
             bus_for_each_dev+0x60/0xa0
             driver_attach+0x20/0x28
             bus_add_driver+0x108/0x208
             driver_register+0x5c/0x118
             __platform_driver_register+0x24/0x2c
             init_module+0x28/0xa7c [sfp]
             do_one_initcall+0x70/0x2ec
             do_init_module+0x54/0x1e4
             load_module+0x1b78/0x1c8c
             __do_sys_init_module+0x1bc/0x2cc
             __arm64_sys_init_module+0x18/0x20
             invoke_syscall.constprop.0+0x4c/0xdc
             do_el0_svc+0x3c/0xbc
             el0_svc+0x34/0x80
             el0t_64_sync_handler+0xf8/0x124
             el0t_64_sync+0x150/0x154
      
      -> #2 (rtnl_mutex){+.+.}-{3:3}:
             __mutex_lock+0x88/0x7a0
             mutex_lock_nested+0x20/0x28
             rtnl_lock+0x18/0x20
             set_device_name+0x30/0x130
             netdev_trig_activate+0x13c/0x1ac
             led_trigger_set+0x118/0x234
             led_trigger_write+0x104/0x17c
             sysfs_kf_bin_write+0x64/0x80
             kernfs_fop_write_iter+0x128/0x1b4
             vfs_write+0x178/0x2a4
             ksys_write+0x58/0xd4
             __arm64_sys_write+0x18/0x20
             invoke_syscall.constprop.0+0x4c/0xdc
             do_el0_svc+0x3c/0xbc
             el0_svc+0x34/0x80
             el0t_64_sync_handler+0xf8/0x124
             el0t_64_sync+0x150/0x154
      
      -> #1 (&led_cdev->trigger_lock){++++}-{3:3}:
             down_write+0x4c/0x13c
             led_trigger_write+0xf8/0x17c
             sysfs_kf_bin_write+0x64/0x80
             kernfs_fop_write_iter+0x128/0x1b4
             vfs_write+0x178/0x2a4
             ksys_write+0x58/0xd4
             __arm64_sys_write+0x18/0x20
             invoke_syscall.constprop.0+0x4c/0xdc
             do_el0_svc+0x3c/0xbc
             el0_svc+0x34/0x80
             el0t_64_sync_handler+0xf8/0x124
             el0t_64_sync+0x150/0x154
      
      -> #0 (triggers_list_lock){++++}-{3:3}:
             __lock_acquire+0x12a0/0x2014
             lock_acquire+0x100/0x2ac
             down_write+0x4c/0x13c
             led_trigger_register+0x4c/0x1a8
             phy_led_triggers_register+0x9c/0x214
             phy_attach_direct+0x154/0x36c
             phylink_attach_phy+0x30/0x60
             phylink_sfp_connect_phy+0x140/0x510
             sfp_add_phy+0x34/0x50
             init_module+0x15c/0xa7c [sfp]
             cleanup_module+0x1d94/0x3120 [sfp]
             cleanup_module+0x2bb4/0x3120 [sfp]
             process_one_work+0x1f8/0x4ec
             worker_thread+0x1e8/0x3d8
             kthread+0x104/0x110
             ret_from_fork+0x10/0x20
      
      other info that might help us debug this:
      
      Chain exists of:
        triggers_list_lock --> rtnl_mutex --> &sfp->sm_mutex
      
       Possible unsafe locking scenario:
      
             CPU0                    CPU1
             ----                    ----
        lock(&sfp->sm_mutex);
                                     lock(rtnl_mutex);
                                     lock(&sfp->sm_mutex);
        lock(triggers_list_lock);
      
       *** DEADLOCK ***
      
      4 locks held by kworker/u8:2/43:
       #0: ffffff80c000f938 ((wq_completion)events_power_efficient){+.+.}-{0:0}, at: process_one_work+0x150/0x4ec
       #1: ffffffc08214bde8 ((work_completion)(&(&sfp->timeout)->work)){+.+.}-{0:0}, at: process_one_work+0x150/0x4ec
       #2: ffffffc0810902f8 (rtnl_mutex){+.+.}-{3:3}, at: rtnl_lock+0x18/0x20
       #3: ffffff80c5c6f318 (&sfp->sm_mutex){+.+.}-{3:3}, at: cleanup_module+0x2ba8/0x3120 [sfp]
      
      stack backtrace:
      CPU: 0 PID: 43 Comm: kworker/u8:2 Tainted: G           O       6.7.0-rc4-next-20231208+ #0
      Hardware name: Bananapi BPI-R4 (DT)
      Workqueue: events_power_efficient cleanup_module [sfp]
      Call trace:
       dump_backtrace+0xa8/0x10c
       show_stack+0x14/0x1c
       dump_stack_lvl+0x5c/0xa0
       dump_stack+0x14/0x1c
       print_circular_bug+0x328/0x430
       check_noncircular+0x124/0x134
       __lock_acquire+0x12a0/0x2014
       lock_acquire+0x100/0x2ac
       down_write+0x4c/0x13c
       led_trigger_register+0x4c/0x1a8
       phy_led_triggers_register+0x9c/0x214
       phy_attach_direct+0x154/0x36c
       phylink_attach_phy+0x30/0x60
       phylink_sfp_connect_phy+0x140/0x510
       sfp_add_phy+0x34/0x50
       init_module+0x15c/0xa7c [sfp]
       cleanup_module+0x1d94/0x3120 [sfp]
       cleanup_module+0x2bb4/0x3120 [sfp]
       process_one_work+0x1f8/0x4ec
       worker_thread+0x1e8/0x3d8
       kthread+0x104/0x110
       ret_from_fork+0x10/0x20
      
      Signed-off-by: default avatarDaniel Golle <daniel@makrotopia.org>
      Fixes: 01e5b728
      
       ("net: phy: Add a binding for PHY LEDs")
      Link: https://lore.kernel.org/r/102a9dce38bdf00215735d04cd4704458273ad9c.1702339354.git.daniel@makrotopia.org
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d98ce1f0
    • Andy Gospodarek's avatar
      bnxt_en: do not map packet buffers twice · f0534c0f
      Andy Gospodarek authored
      [ Upstream commit 23c93c3b ]
      
      Remove double-mapping of DMA buffers as it can prevent page pool entries
      from being freed.  Mapping is managed by page pool infrastructure and
      was previously managed by the driver in __bnxt_alloc_rx_page before
      allowing the page pool infrastructure to manage it.
      
      Fixes: 578fcfd2
      
       ("bnxt_en: Let the page pool manage the DMA mapping")
      Reviewed-by: default avatarSomnath Kotur <somnath.kotur@broadcom.com>
      Signed-off-by: default avatarAndy Gospodarek <andrew.gospodarek@broadcom.com>
      Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
      Reviewed-by: default avatarDavid Wei <dw@davidwei.uk>
      Link: https://lore.kernel.org/r/20231214213138.98095-1-michael.chan@broadcom.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f0534c0f
    • Luiz Augusto von Dentz's avatar
      Bluetooth: hci_core: Fix hci_conn_hash_lookup_cis · a07a95bc
      Luiz Augusto von Dentz authored
      [ Upstream commit 50efc63d ]
      
      hci_conn_hash_lookup_cis shall always match the requested CIG and CIS
      ids even when they are unset as otherwise it result in not being able
      to bind/connect different sockets to the same address as that would
      result in having multiple sockets mapping to the same hci_conn which
      doesn't really work and prevents BAP audio configuration such as
      AC 6(i) when CIG and CIS are left unset.
      
      Fixes: c14516fa
      
       ("Bluetooth: hci_conn: Fix not matching by CIS ID")
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a07a95bc
    • Arnd Bergmann's avatar
      Bluetooth: hci_event: shut up a false-positive warning · 7ee2ba3d
      Arnd Bergmann authored
      [ Upstream commit a5812c68 ]
      
      Turning on -Wstringop-overflow globally exposed a misleading compiler
      warning in bluetooth:
      
      net/bluetooth/hci_event.c: In function 'hci_cc_read_class_of_dev':
      net/bluetooth/hci_event.c:524:9: error: 'memcpy' writing 3 bytes into a
      region of size 0 overflows the destination [-Werror=stringop-overflow=]
        524 |         memcpy(hdev->dev_class, rp->dev_class, 3);
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      The problem here is the check for hdev being NULL in bt_dev_dbg() that
      leads the compiler to conclude that hdev->dev_class might be an invalid
      pointer access.
      
      Add another explicit check for the same condition to make sure gcc sees
      this cannot happen.
      
      Fixes: a9de9248
      
       ("[Bluetooth] Switch from OGF+OCF to using only opcodes")
      Fixes: 1b56c90018f0 ("Makefile: Enable -Wstringop-overflow globally")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7ee2ba3d
    • Ying Hsu's avatar
      Bluetooth: Fix deadlock in vhci_send_frame · 7fe3556f
      Ying Hsu authored
      [ Upstream commit 769bf60e ]
      
      syzbot found a potential circular dependency leading to a deadlock:
          -> #3 (&hdev->req_lock){+.+.}-{3:3}:
          __mutex_lock_common+0x1b6/0x1bc2 kernel/locking/mutex.c:599
          __mutex_lock kernel/locking/mutex.c:732 [inline]
          mutex_lock_nested+0x17/0x1c kernel/locking/mutex.c:784
          hci_dev_do_close+0x3f/0x9f net/bluetooth/hci_core.c:551
          hci_rfkill_set_block+0x130/0x1ac net/bluetooth/hci_core.c:935
          rfkill_set_block+0x1e6/0x3b8 net/rfkill/core.c:345
          rfkill_fop_write+0x2d8/0x672 net/rfkill/core.c:1274
          vfs_write+0x277/0xcf5 fs/read_write.c:594
          ksys_write+0x19b/0x2bd fs/read_write.c:650
          do_syscall_x64 arch/x86/entry/common.c:55 [inline]
          do_syscall_64+0x51/0xba arch/x86/entry/common.c:93
          entry_SYSCALL_64_after_hwframe+0x61/0xcb
      
          -> #2 (rfkill_global_mutex){+.+.}-{3:3}:
          __mutex_lock_common+0x1b6/0x1bc2 kernel/locking/mutex.c:599
          __mutex_lock kernel/locking/mutex.c:732 [inline]
          mutex_lock_nested+0x17/0x1c kernel/locking/mutex.c:784
          rfkill_register+0x30/0x7e3 net/rfkill/core.c:1045
          hci_register_dev+0x48f/0x96d net/bluetooth/hci_core.c:2622
          __vhci_create_device drivers/bluetooth/hci_vhci.c:341 [inline]
          vhci_create_device+0x3ad/0x68f drivers/bluetooth/hci_vhci.c:374
          vhci_get_user drivers/bluetooth/hci_vhci.c:431 [inline]
          vhci_write+0x37b/0x429 drivers/bluetooth/hci_vhci.c:511
          call_write_iter include/linux/fs.h:2109 [inline]
          new_sync_write fs/read_write.c:509 [inline]
          vfs_write+0xaa8/0xcf5 fs/read_write.c:596
          ksys_write+0x19b/0x2bd fs/read_write.c:650
          do_syscall_x64 arch/x86/entry/common.c:55 [inline]
          do_syscall_64+0x51/0xba arch/x86/entry/common.c:93
          entry_SYSCALL_64_after_hwframe+0x61/0xcb
      
          -> #1 (&data->open_mutex){+.+.}-{3:3}:
          __mutex_lock_common+0x1b6/0x1bc2 kernel/locking/mutex.c:599
          __mutex_lock kernel/locking/mutex.c:732 [inline]
          mutex_lock_nested+0x17/0x1c kernel/locking/mutex.c:784
          vhci_send_frame+0x68/0x9c drivers/bluetooth/hci_vhci.c:75
          hci_send_frame+0x1cc/0x2ff net/bluetooth/hci_core.c:2989
          hci_sched_acl_pkt net/bluetooth/hci_core.c:3498 [inline]
          hci_sched_acl net/bluetooth/hci_core.c:3583 [inline]
          hci_tx_work+0xb94/0x1a60 net/bluetooth/hci_core.c:3654
          process_one_work+0x901/0xfb8 kernel/workqueue.c:2310
          worker_thread+0xa67/0x1003 kernel/workqueue.c:2457
          kthread+0x36a/0x430 kernel/kthread.c:319
          ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
      
          -> #0 ((work_completion)(&hdev->tx_work)){+.+.}-{0:0}:
          check_prev_add kernel/locking/lockdep.c:3053 [inline]
          check_prevs_add kernel/locking/lockdep.c:3172 [inline]
          validate_chain kernel/locking/lockdep.c:3787 [inline]
          __lock_acquire+0x2d32/0x77fa kernel/locking/lockdep.c:5011
          lock_acquire+0x273/0x4d5 kernel/locking/lockdep.c:5622
          __flush_work+0xee/0x19f kernel/workqueue.c:3090
          hci_dev_close_sync+0x32f/0x1113 net/bluetooth/hci_sync.c:4352
          hci_dev_do_close+0x47/0x9f net/bluetooth/hci_core.c:553
          hci_rfkill_set_block+0x130/0x1ac net/bluetooth/hci_core.c:935
          rfkill_set_block+0x1e6/0x3b8 net/rfkill/core.c:345
          rfkill_fop_write+0x2d8/0x672 net/rfkill/core.c:1274
          vfs_write+0x277/0xcf5 fs/read_write.c:594
          ksys_write+0x19b/0x2bd fs/read_write.c:650
          do_syscall_x64 arch/x86/entry/common.c:55 [inline]
          do_syscall_64+0x51/0xba arch/x86/entry/common.c:93
          entry_SYSCALL_64_after_hwframe+0x61/0xcb
      
      This change removes the need for acquiring the open_mutex in
      vhci_send_frame, thus eliminating the potential deadlock while
      maintaining the required packet ordering.
      
      Fixes: 92d4abd6
      
       ("Bluetooth: vhci: Fix race when opening vhci device")
      Signed-off-by: default avatarYing Hsu <yinghsu@chromium.org>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7fe3556f
    • Luiz Augusto von Dentz's avatar
      Bluetooth: Fix not notifying when connection encryption changes · 399dea9d
      Luiz Augusto von Dentz authored
      [ Upstream commit f67eabff ]
      
      Some layers such as SMP depend on getting notified about encryption
      changes immediately as they only allow certain PDU to be transmitted
      over an encrypted link which may cause SMP implementation to reject
      valid PDUs received thus causing pairing to fail when it shouldn't.
      
      Fixes: 7aca0ac4
      
       ("Bluetooth: Wait for HCI_OP_WRITE_AUTH_PAYLOAD_TO to complete")
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      399dea9d
    • Eric Dumazet's avatar
      net/rose: fix races in rose_kill_by_device() · ffced266
      Eric Dumazet authored
      [ Upstream commit 64b8bc7d ]
      
      syzbot found an interesting netdev refcounting issue in
      net/rose/af_rose.c, thanks to CONFIG_NET_DEV_REFCNT_TRACKER=y [1]
      
      Problem is that rose_kill_by_device() can change rose->device
      while other threads do not expect the pointer to be changed.
      
      We have to first collect sockets in a temporary array,
      then perform the changes while holding the socket
      lock and rose_list_lock spinlock (in this order)
      
      Change rose_release() to also acquire rose_list_lock
      before releasing the netdev refcount.
      
      [1]
      
      [ 1185.055088][ T7889] ref_tracker: reference already released.
      [ 1185.061476][ T7889] ref_tracker: allocated in:
      [ 1185.066081][ T7889]  rose_bind+0x4ab/0xd10
      [ 1185.070446][ T7889]  __sys_bind+0x1ec/0x220
      [ 1185.074818][ T7889]  __x64_sys_bind+0x72/0xb0
      [ 1185.079356][ T7889]  do_syscall_64+0x40/0x110
      [ 1185.083897][ T7889]  entry_SYSCALL_64_after_hwframe+0x63/0x6b
      [ 1185.089835][ T7889] ref_tracker: freed in:
      [ 1185.094088][ T7889]  rose_release+0x2f5/0x570
      [ 1185.098629][ T7889]  __sock_release+0xae/0x260
      [ 1185.103262][ T7889]  sock_close+0x1c/0x20
      [ 1185.107453][ T7889]  __fput+0x270/0xbb0
      [ 1185.111467][ T7889]  task_work_run+0x14d/0x240
      [ 1185.116085][ T7889]  get_signal+0x106f/0x2790
      [ 1185.120622][ T7889]  arch_do_signal_or_restart+0x90/0x7f0
      [ 1185.126205][ T7889]  exit_to_user_mode_prepare+0x121/0x240
      [ 1185.131846][ T7889]  syscall_exit_to_user_mode+0x1e/0x60
      [ 1185.137293][ T7889]  do_syscall_64+0x4d/0x110
      [ 1185.141783][ T7889]  entry_SYSCALL_64_after_hwframe+0x63/0x6b
      [ 1185.148085][ T7889] ------------[ cut here ]------------
      
      WARNING: CPU: 1 PID: 7889 at lib/ref_tracker.c:255 ref_tracker_free+0x61a/0x810 lib/ref_tracker.c:255
      Modules linked in:
      CPU: 1 PID: 7889 Comm: syz-executor.2 Not tainted 6.7.0-rc4-syzkaller-00162-g65c95f78917e #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/10/2023
      RIP: 0010:ref_tracker_free+0x61a/0x810 lib/ref_tracker.c:255
      Code: 00 44 8b 6b 18 31 ff 44 89 ee e8 21 62 f5 fc 45 85 ed 0f 85 a6 00 00 00 e8 a3 66 f5 fc 48 8b 34 24 48 89 ef e8 27 5f f1 05 90 <0f> 0b 90 bb ea ff ff ff e9 52 fd ff ff e8 84 66 f5 fc 4c 8d 6d 44
      RSP: 0018:ffffc90004917850 EFLAGS: 00010202
      RAX: 0000000000000201 RBX: ffff88802618f4c0 RCX: 0000000000000000
      RDX: 0000000000000202 RSI: ffffffff8accb920 RDI: 0000000000000001
      RBP: ffff8880269ea5b8 R08: 0000000000000001 R09: fffffbfff23e35f6
      R10: ffffffff91f1afb7 R11: 0000000000000001 R12: 1ffff92000922f0c
      R13: 0000000005a2039b R14: ffff88802618f4d8 R15: 00000000ffffffff
      FS: 00007f0a720ef6c0(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
      CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f43a819d988 CR3: 0000000076c64000 CR4: 00000000003506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
      <TASK>
      netdev_tracker_free include/linux/netdevice.h:4127 [inline]
      netdev_put include/linux/netdevice.h:4144 [inline]
      netdev_put include/linux/netdevice.h:4140 [inline]
      rose_kill_by_device net/rose/af_rose.c:195 [inline]
      rose_device_event+0x25d/0x330 net/rose/af_rose.c:218
      notifier_call_chain+0xb6/0x3b0 kernel/notifier.c:93
      call_netdevice_notifiers_info+0xbe/0x130 net/core/dev.c:1967
      call_netdevice_notifiers_extack net/core/dev.c:2005 [inline]
      call_netdevice_notifiers net/core/dev.c:2019 [inline]
      __dev_notify_flags+0x1f5/0x2e0 net/core/dev.c:8646
      dev_change_flags+0x122/0x170 net/core/dev.c:8682
      dev_ifsioc+0x9ad/0x1090 net/core/dev_ioctl.c:529
      dev_ioctl+0x224/0x1090 net/core/dev_ioctl.c:786
      sock_do_ioctl+0x198/0x270 net/socket.c:1234
      sock_ioctl+0x22e/0x6b0 net/socket.c:1339
      vfs_ioctl fs/ioctl.c:51 [inline]
      __do_sys_ioctl fs/ioctl.c:871 [inline]
      __se_sys_ioctl fs/ioctl.c:857 [inline]
      __x64_sys_ioctl+0x18f/0x210 fs/ioctl.c:857
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
      entry_SYSCALL_64_after_hwframe+0x63/0x6b
      RIP: 0033:0x7f0a7147cba9
      Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007f0a720ef0c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      RAX: ffffffffffffffda RBX: 00007f0a7159bf80 RCX: 00007f0a7147cba9
      RDX: 0000000020000040 RSI: 0000000000008914 RDI: 0000000000000004
      RBP: 00007f0a714c847a R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      R13: 000000000000000b R14: 00007f0a7159bf80 R15: 00007ffc8bb3a5f8
      </TASK>
      
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Bernard Pidoux <f6bvp@free.fr>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ffced266
    • Zhipeng Lu's avatar
      ethernet: atheros: fix a memleak in atl1e_setup_ring_resources · 73e159a2
      Zhipeng Lu authored
      [ Upstream commit 309fdb1c ]
      
      In the error handling of 'offset > adapter->ring_size', the
      tx_ring->tx_buffer allocated by kzalloc should be freed,
      instead of 'goto failed' instantly.
      
      Fixes: a6a53252
      
       ("atl1e: Atheros L1E Gigabit Ethernet driver")
      Signed-off-by: default avatarZhipeng Lu <alexious@zju.edu.cn>
      Reviewed-by: default avatarSuman Ghosh <sumang@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      73e159a2
    • Eric Dumazet's avatar
      net: sched: ife: fix potential use-after-free · 2839a639
      Eric Dumazet authored
      [ Upstream commit 19391a2c ]
      
      ife_decode() calls pskb_may_pull() two times, we need to reload
      ifehdr after the second one, or risk use-after-free as reported
      by syzbot:
      
      BUG: KASAN: slab-use-after-free in __ife_tlv_meta_valid net/ife/ife.c:108 [inline]
      BUG: KASAN: slab-use-after-free in ife_tlv_meta_decode+0x1d1/0x210 net/ife/ife.c:131
      Read of size 2 at addr ffff88802d7300a4 by task syz-executor.5/22323
      
      CPU: 0 PID: 22323 Comm: syz-executor.5 Not tainted 6.7.0-rc3-syzkaller-00804-g074ac38d5b95 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/10/2023
      Call Trace:
      <TASK>
      __dump_stack lib/dump_stack.c:88 [inline]
      dump_stack_lvl+0xd9/0x1b0 lib/dump_stack.c:106
      print_address_description mm/kasan/report.c:364 [inline]
      print_report+0xc4/0x620 mm/kasan/report.c:475
      kasan_report+0xda/0x110 mm/kasan/report.c:588
      __ife_tlv_meta_valid net/ife/ife.c:108 [inline]
      ife_tlv_meta_decode+0x1d1/0x210 net/ife/ife.c:131
      tcf_ife_decode net/sched/act_ife.c:739 [inline]
      tcf_ife_act+0x4e3/0x1cd0 net/sched/act_ife.c:879
      tc_act include/net/tc_wrapper.h:221 [inline]
      tcf_action_exec+0x1ac/0x620 net/sched/act_api.c:1079
      tcf_exts_exec include/net/pkt_cls.h:344 [inline]
      mall_classify+0x201/0x310 net/sched/cls_matchall.c:42
      tc_classify include/net/tc_wrapper.h:227 [inline]
      __tcf_classify net/sched/cls_api.c:1703 [inline]
      tcf_classify+0x82f/0x1260 net/sched/cls_api.c:1800
      hfsc_classify net/sched/sch_hfsc.c:1147 [inline]
      hfsc_enqueue+0x315/0x1060 net/sched/sch_hfsc.c:1546
      dev_qdisc_enqueue+0x3f/0x230 net/core/dev.c:3739
      __dev_xmit_skb net/core/dev.c:3828 [inline]
      __dev_queue_xmit+0x1de1/0x3d30 net/core/dev.c:4311
      dev_queue_xmit include/linux/netdevice.h:3165 [inline]
      packet_xmit+0x237/0x350 net/packet/af_packet.c:276
      packet_snd net/packet/af_packet.c:3081 [inline]
      packet_sendmsg+0x24aa/0x5200 net/packet/af_packet.c:3113
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0xd5/0x180 net/socket.c:745
      __sys_sendto+0x255/0x340 net/socket.c:2190
      __do_sys_sendto net/socket.c:2202 [inline]
      __se_sys_sendto net/socket.c:2198 [inline]
      __x64_sys_sendto+0xe0/0x1b0 net/socket.c:2198
      do_syscall_x64 arch/x86/entry/common.c:51 [inline]
      do_syscall_64+0x40/0x110 arch/x86/entry/common.c:82
      entry_SYSCALL_64_after_hwframe+0x63/0x6b
      RIP: 0033:0x7fe9acc7cae9
      Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007fe9ada450c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
      RAX: ffffffffffffffda RBX: 00007fe9acd9bf80 RCX: 00007fe9acc7cae9
      RDX: 000000000000fce0 RSI: 00000000200002c0 RDI: 0000000000000003
      RBP: 00007fe9accc847a R08: 0000000020000140 R09: 0000000000000014
      R10: 0000000000000004 R11: 0000000000000246 R12: 0000000000000000
      R13: 000000000000000b R14: 00007fe9acd9bf80 R15: 00007ffd5427ae78
      </TASK>
      
      Allocated by task 22323:
      kasan_save_stack+0x33/0x50 mm/kasan/common.c:45
      kasan_set_track+0x25/0x30 mm/kasan/common.c:52
      ____kasan_kmalloc mm/kasan/common.c:374 [inline]
      __kasan_kmalloc+0xa2/0xb0 mm/kasan/common.c:383
      kasan_kmalloc include/linux/kasan.h:198 [inline]
      __do_kmalloc_node mm/slab_common.c:1007 [inline]
      __kmalloc_node_track_caller+0x5a/0x90 mm/slab_common.c:1027
      kmalloc_reserve+0xef/0x260 net/core/skbuff.c:582
      __alloc_skb+0x12b/0x330 net/core/skbuff.c:651
      alloc_skb include/linux/skbuff.h:1298 [inline]
      alloc_skb_with_frags+0xe4/0x710 net/core/skbuff.c:6331
      sock_alloc_send_pskb+0x7e4/0x970 net/core/sock.c:2780
      packet_alloc_skb net/packet/af_packet.c:2930 [inline]
      packet_snd net/packet/af_packet.c:3024 [inline]
      packet_sendmsg+0x1e2a/0x5200 net/packet/af_packet.c:3113
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0xd5/0x180 net/socket.c:745
      __sys_sendto+0x255/0x340 net/socket.c:2190
      __do_sys_sendto net/socket.c:2202 [inline]
      __se_sys_sendto net/socket.c:2198 [inline]
      __x64_sys_sendto+0xe0/0x1b0 net/socket.c:2198
      do_syscall_x64 arch/x86/entry/common.c:51 [inline]
      do_syscall_64+0x40/0x110 arch/x86/entry/common.c:82
      entry_SYSCALL_64_after_hwframe+0x63/0x6b
      
      Freed by task 22323:
      kasan_save_stack+0x33/0x50 mm/kasan/common.c:45
      kasan_set_track+0x25/0x30 mm/kasan/common.c:52
      kasan_save_free_info+0x2b/0x40 mm/kasan/generic.c:522
      ____kasan_slab_free mm/kasan/common.c:236 [inline]
      ____kasan_slab_free+0x15b/0x1b0 mm/kasan/common.c:200
      kasan_slab_free include/linux/kasan.h:164 [inline]
      slab_free_hook mm/slub.c:1800 [inline]
      slab_free_freelist_hook+0x114/0x1e0 mm/slub.c:1826
      slab_free mm/slub.c:3809 [inline]
      __kmem_cache_free+0xc0/0x180 mm/slub.c:3822
      skb_kfree_head net/core/skbuff.c:950 [inline]
      skb_free_head+0x110/0x1b0 net/core/skbuff.c:962
      pskb_expand_head+0x3c5/0x1170 net/core/skbuff.c:2130
      __pskb_pull_tail+0xe1/0x1830 net/core/skbuff.c:2655
      pskb_may_pull_reason include/linux/skbuff.h:2685 [inline]
      pskb_may_pull include/linux/skbuff.h:2693 [inline]
      ife_decode+0x394/0x4f0 net/ife/ife.c:82
      tcf_ife_decode net/sched/act_ife.c:727 [inline]
      tcf_ife_act+0x43b/0x1cd0 net/sched/act_ife.c:879
      tc_act include/net/tc_wrapper.h:221 [inline]
      tcf_action_exec+0x1ac/0x620 net/sched/act_api.c:1079
      tcf_exts_exec include/net/pkt_cls.h:344 [inline]
      mall_classify+0x201/0x310 net/sched/cls_matchall.c:42
      tc_classify include/net/tc_wrapper.h:227 [inline]
      __tcf_classify net/sched/cls_api.c:1703 [inline]
      tcf_classify+0x82f/0x1260 net/sched/cls_api.c:1800
      hfsc_classify net/sched/sch_hfsc.c:1147 [inline]
      hfsc_enqueue+0x315/0x1060 net/sched/sch_hfsc.c:1546
      dev_qdisc_enqueue+0x3f/0x230 net/core/dev.c:3739
      __dev_xmit_skb net/core/dev.c:3828 [inline]
      __dev_queue_xmit+0x1de1/0x3d30 net/core/dev.c:4311
      dev_queue_xmit include/linux/netdevice.h:3165 [inline]
      packet_xmit+0x237/0x350 net/packet/af_packet.c:276
      packet_snd net/packet/af_packet.c:3081 [inline]
      packet_sendmsg+0x24aa/0x5200 net/packet/af_packet.c:3113
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0xd5/0x180 net/socket.c:745
      __sys_sendto+0x255/0x340 net/socket.c:2190
      __do_sys_sendto net/socket.c:2202 [inline]
      __se_sys_sendto net/socket.c:2198 [inline]
      __x64_sys_sendto+0xe0/0x1b0 net/socket.c:2198
      do_syscall_x64 arch/x86/entry/common.c:51 [inline]
      do_syscall_64+0x40/0x110 arch/x86/entry/common.c:82
      entry_SYSCALL_64_after_hwframe+0x63/0x6b
      
      The buggy address belongs to the object at ffff88802d730000
      which belongs to the cache kmalloc-8k of size 8192
      The buggy address is located 164 bytes inside of
      freed 8192-byte region [ffff88802d730000, ffff88802d732000)
      
      The buggy address belongs to the physical page:
      page:ffffea0000b5cc00 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2d730
      head:ffffea0000b5cc00 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
      flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff)
      page_type: 0xffffffff()
      raw: 00fff00000000840 ffff888013042280 dead000000000122 0000000000000000
      raw: 0000000000000000 0000000080020002 00000001ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      page_owner tracks the page as allocated
      page last allocated via order 3, migratetype Unmovable, gfp_mask 0x1d20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_HARDWALL), pid 22323, tgid 22320 (syz-executor.5), ts 950317230369, free_ts 950233467461
      set_page_owner include/linux/page_owner.h:31 [inline]
      post_alloc_hook+0x2d0/0x350 mm/page_alloc.c:1544
      prep_new_page mm/page_alloc.c:1551 [inline]
      get_page_from_freelist+0xa28/0x3730 mm/page_alloc.c:3319
      __alloc_pages+0x22e/0x2420 mm/page_alloc.c:4575
      alloc_pages_mpol+0x258/0x5f0 mm/mempolicy.c:2133
      alloc_slab_page mm/slub.c:1870 [inline]
      allocate_slab mm/slub.c:2017 [inline]
      new_slab+0x283/0x3c0 mm/slub.c:2070
      ___slab_alloc+0x979/0x1500 mm/slub.c:3223
      __slab_alloc.constprop.0+0x56/0xa0 mm/slub.c:3322
      __slab_alloc_node mm/slub.c:3375 [inline]
      slab_alloc_node mm/slub.c:3468 [inline]
      __kmem_cache_alloc_node+0x131/0x310 mm/slub.c:3517
      __do_kmalloc_node mm/slab_common.c:1006 [inline]
      __kmalloc_node_track_caller+0x4a/0x90 mm/slab_common.c:1027
      kmalloc_reserve+0xef/0x260 net/core/skbuff.c:582
      __alloc_skb+0x12b/0x330 net/core/skbuff.c:651
      alloc_skb include/linux/skbuff.h:1298 [inline]
      alloc_skb_with_frags+0xe4/0x710 net/core/skbuff.c:6331
      sock_alloc_send_pskb+0x7e4/0x970 net/core/sock.c:2780
      packet_alloc_skb net/packet/af_packet.c:2930 [inline]
      packet_snd net/packet/af_packet.c:3024 [inline]
      packet_sendmsg+0x1e2a/0x5200 net/packet/af_packet.c:3113
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0xd5/0x180 net/socket.c:745
      __sys_sendto+0x255/0x340 net/socket.c:2190
      page last free stack trace:
      reset_page_owner include/linux/page_owner.h:24 [inline]
      free_pages_prepare mm/page_alloc.c:1144 [inline]
      free_unref_page_prepare+0x53c/0xb80 mm/page_alloc.c:2354
      free_unref_page+0x33/0x3b0 mm/page_alloc.c:2494
      __unfreeze_partials+0x226/0x240 mm/slub.c:2655
      qlink_free mm/kasan/quarantine.c:168 [inline]
      qlist_free_all+0x6a/0x170 mm/kasan/quarantine.c:187
      kasan_quarantine_reduce+0x18e/0x1d0 mm/kasan/quarantine.c:294
      __kasan_slab_alloc+0x65/0x90 mm/kasan/common.c:305
      kasan_slab_alloc include/linux/kasan.h:188 [inline]
      slab_post_alloc_hook mm/slab.h:763 [inline]
      slab_alloc_node mm/slub.c:3478 [inline]
      slab_alloc mm/slub.c:3486 [inline]
      __kmem_cache_alloc_lru mm/slub.c:3493 [inline]
      kmem_cache_alloc_lru+0x219/0x6f0 mm/slub.c:3509
      alloc_inode_sb include/linux/fs.h:2937 [inline]
      ext4_alloc_inode+0x28/0x650 fs/ext4/super.c:1408
      alloc_inode+0x5d/0x220 fs/inode.c:261
      new_inode_pseudo fs/inode.c:1006 [inline]
      new_inode+0x22/0x260 fs/inode.c:1032
      __ext4_new_inode+0x333/0x5200 fs/ext4/ialloc.c:958
      ext4_symlink+0x5d7/0xa20 fs/ext4/namei.c:3398
      vfs_symlink fs/namei.c:4464 [inline]
      vfs_symlink+0x3e5/0x620 fs/namei.c:4448
      do_symlinkat+0x25f/0x310 fs/namei.c:4490
      __do_sys_symlinkat fs/namei.c:4506 [inline]
      __se_sys_symlinkat fs/namei.c:4503 [inline]
      __x64_sys_symlinkat+0x97/0xc0 fs/namei.c:4503
      do_syscall_x64 arch/x86/entry/common.c:51 [inline]
      do_syscall_64+0x40/0x110 arch/x86/entry/common.c:82
      
      Fixes: d57493d6
      
       ("net: sched: ife: check on metadata length")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Cc: Alexander Aring <aahringo@redhat.com>
      Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2839a639
    • Shigeru Yoshida's avatar
      net: Return error from sk_stream_wait_connect() if sk_wait_event() fails · 2ef87ac5
      Shigeru Yoshida authored
      [ Upstream commit cac23b7d ]
      
      The following NULL pointer dereference issue occurred:
      
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      <...>
      RIP: 0010:ccid_hc_tx_send_packet net/dccp/ccid.h:166 [inline]
      RIP: 0010:dccp_write_xmit+0x49/0x140 net/dccp/output.c:356
      <...>
      Call Trace:
       <TASK>
       dccp_sendmsg+0x642/0x7e0 net/dccp/proto.c:801
       inet_sendmsg+0x63/0x90 net/ipv4/af_inet.c:846
       sock_sendmsg_nosec net/socket.c:730 [inline]
       __sock_sendmsg+0x83/0xe0 net/socket.c:745
       ____sys_sendmsg+0x443/0x510 net/socket.c:2558
       ___sys_sendmsg+0xe5/0x150 net/socket.c:2612
       __sys_sendmsg+0xa6/0x120 net/socket.c:2641
       __do_sys_sendmsg net/socket.c:2650 [inline]
       __se_sys_sendmsg net/socket.c:2648 [inline]
       __x64_sys_sendmsg+0x45/0x50 net/socket.c:2648
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x43/0x110 arch/x86/entry/common.c:82
       entry_SYSCALL_64_after_hwframe+0x63/0x6b
      
      sk_wait_event() returns an error (-EPIPE) if disconnect() is called on the
      socket waiting for the event. However, sk_stream_wait_connect() returns
      success, i.e. zero, even if sk_wait_event() returns -EPIPE, so a function
      that waits for a connection with sk_stream_wait_connect() may misbehave.
      
      In the case of the above DCCP issue, dccp_sendmsg() is waiting for the
      connection. If disconnect() is called in concurrently, the above issue
      occurs.
      
      This patch fixes the issue by returning error from sk_stream_wait_connect()
      if sk_wait_event() fails.
      
      Fixes: 419ce133
      
       ("tcp: allow again tcp_disconnect() when threads are waiting")
      Signed-off-by: default avatarShigeru Yoshida <syoshida@redhat.com>
      Reviewed-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
      Reported-by: default avatar <syzbot+c71bc336c5061153b502@syzkaller.appspotmail.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Reported-by: default avatarsyzkaller <syzkaller@googlegroups.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2ef87ac5
    • Suman Ghosh's avatar
      octeontx2-pf: Fix graceful exit during PFC configuration failure · 1e5283b9
      Suman Ghosh authored
      [ Upstream commit 8c97ab54 ]
      
      During PFC configuration failure the code was not handling a graceful
      exit. This patch fixes the same and add proper code for a graceful exit.
      
      Fixes: 99c969a8
      
       ("octeontx2-pf: Add egress PFC support")
      Signed-off-by: default avatarSuman Ghosh <sumang@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1e5283b9
    • Vladimir Oltean's avatar
      net: mscc: ocelot: fix pMAC TX RMON stats for bucket 256-511 and above · fd0f5c1a
      Vladimir Oltean authored
      [ Upstream commit 70f010da ]
      
      The typo from ocelot_port_rmon_stats_cb() was also carried over to
      ocelot_port_pmac_rmon_stats_cb() as well, leading to incorrect TX RMON
      stats for the pMAC too.
      
      Fixes: ab3f97a9
      
       ("net: mscc: ocelot: export ethtool MAC Merge stats for Felix VSC9959")
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Link: https://lore.kernel.org/r/20231214000902.545625-2-vladimir.oltean@nxp.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fd0f5c1a
    • Vladimir Oltean's avatar
      net: mscc: ocelot: fix eMAC TX RMON stats for bucket 256-511 and above · 30108546
      Vladimir Oltean authored
      [ Upstream commit 52eda464 ]
      
      There is a typo in the driver due to which we report incorrect TX RMON
      counters for the 256-511 octet bucket and all the other buckets larger
      than that.
      
      Bug found with the selftest at
      https://patchwork.kernel.org/project/netdevbpf/patch/20231211223346.2497157-9-tobias@waldekranz.com/
      
      Fixes: e32036e1
      
       ("net: mscc: ocelot: add support for all sorts of standardized counters present in DSA")
      Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
      Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
      Link: https://lore.kernel.org/r/20231214000902.545625-1-vladimir.oltean@nxp.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      30108546
    • Rahul Rameshbabu's avatar
      net/mlx5e: Correct snprintf truncation handling for fw_version buffer used by representors · 38de0032
      Rahul Rameshbabu authored
      [ Upstream commit b13559b7 ]
      
      snprintf returns the length of the formatted string, excluding the trailing
      null, without accounting for truncation. This means that is the return
      value is greater than or equal to the size parameter, the fw_version string
      was truncated.
      
      Link: https://docs.kernel.org/core-api/kernel-api.html#c.snprintf
      Fixes: 1b2bd0c0
      
       ("net/mlx5e: Check return value of snprintf writing to fw_version buffer for representors")
      Signed-off-by: default avatarRahul Rameshbabu <rrameshbabu@nvidia.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      38de0032
    • Rahul Rameshbabu's avatar
      net/mlx5e: Correct snprintf truncation handling for fw_version buffer · 952446ad
      Rahul Rameshbabu authored
      [ Upstream commit ad436b9c
      
       ]
      
      snprintf returns the length of the formatted string, excluding the trailing
      null, without accounting for truncation. This means that is the return
      value is greater than or equal to the size parameter, the fw_version string
      was truncated.
      
      Reported-by: default avatarDavid Laight <David.Laight@ACULAB.COM>
      Closes: https://lore.kernel.org/netdev/81cae734ee1b4cde9b380a9a31006c1a@AcuMS.aculab.com/
      Link: https://docs.kernel.org/core-api/kernel-api.html#c.snprintf
      Fixes: 41e63c2b
      
       ("net/mlx5e: Check return value of snprintf writing to fw_version buffer")
      Signed-off-by: default avatarRahul Rameshbabu <rrameshbabu@nvidia.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      952446ad
    • Dan Carpenter's avatar
      net/mlx5e: Fix error codes in alloc_branch_attr() · 46538a6f
      Dan Carpenter authored
      [ Upstream commit d792e5f7 ]
      
      Set the error code if set_branch_dest_ft() fails.
      
      Fixes: ccbe3300
      
       ("net/mlx5e: TC, Don't offload post action rule if not supported")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      46538a6f
    • Dan Carpenter's avatar
      net/mlx5e: Fix error code in mlx5e_tc_action_miss_mapping_get() · 186854bd
      Dan Carpenter authored
      [ Upstream commit 86d59226 ]
      
      Preserve the error code if esw_add_restore_rule() fails.  Don't return
      success.
      
      Fixes: 67027828
      
       ("net/mlx5e: TC, Set CT miss to the specific ct action instance")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      186854bd
    • Vlad Buslov's avatar
      net/mlx5: Refactor mlx5_flow_destination->rep pointer to vport num · 96c8c465
      Vlad Buslov authored
      [ Upstream commit 04ad04e4 ]
      
      Currently the destination rep pointer is only used for comparisons or to
      obtain vport number from it. Since it is used both during flow creation and
      deletion it may point to representor of another eswitch instance which can
      be deallocated during driver unload even when there are rules pointing to
      it[0]. Refactor the code to store vport number and 'valid' flag instead of
      the representor pointer.
      
      [0]:
      [176805.886303] ==================================================================
      [176805.889433] BUG: KASAN: slab-use-after-free in esw_cleanup_dests+0x390/0x440 [mlx5_core]
      [176805.892981] Read of size 2 at addr ffff888155090aa0 by task modprobe/27280
      
      [176805.895462] CPU: 3 PID: 27280 Comm: modprobe Tainted: G    B              6.6.0-rc3+ #1
      [176805.896771] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
      [176805.898514] Call Trace:
      [176805.899026]  <TASK>
      [176805.899519]  dump_stack_lvl+0x33/0x50
      [176805.900221]  print_report+0xc2/0x610
      [176805.900893]  ? mlx5_chains_put_table+0x33d/0x8d0 [mlx5_core]
      [176805.901897]  ? esw_cleanup_dests+0x390/0x440 [mlx5_core]
      [176805.902852]  kasan_report+0xac/0xe0
      [176805.903509]  ? esw_cleanup_dests+0x390/0x440 [mlx5_core]
      [176805.904461]  esw_cleanup_dests+0x390/0x440 [mlx5_core]
      [176805.905223]  __mlx5_eswitch_del_rule+0x1ae/0x460 [mlx5_core]
      [176805.906044]  ? esw_cleanup_dests+0x440/0x440 [mlx5_core]
      [176805.906822]  ? xas_find_conflict+0x420/0x420
      [176805.907496]  ? down_read+0x11e/0x200
      [176805.908046]  mlx5e_tc_rule_unoffload+0xc4/0x2a0 [mlx5_core]
      [176805.908844]  mlx5e_tc_del_fdb_flow+0x7da/0xb10 [mlx5_core]
      [176805.909597]  mlx5e_flow_put+0x4b/0x80 [mlx5_core]
      [176805.910275]  mlx5e_delete_flower+0x5b4/0xb70 [mlx5_core]
      [176805.911010]  tc_setup_cb_reoffload+0x27/0xb0
      [176805.911648]  fl_reoffload+0x62d/0x900 [cls_flower]
      [176805.912313]  ? mlx5e_rep_indr_block_unbind+0xd0/0xd0 [mlx5_core]
      [176805.913151]  ? __fl_put+0x230/0x230 [cls_flower]
      [176805.913768]  ? filter_irq_stacks+0x90/0x90
      [176805.914335]  ? kasan_save_stack+0x1e/0x40
      [176805.914893]  ? kasan_set_track+0x21/0x30
      [176805.915484]  ? kasan_save_free_info+0x27/0x40
      [176805.916105]  tcf_block_playback_offloads+0x79/0x1f0
      [176805.916773]  ? mlx5e_rep_indr_block_unbind+0xd0/0xd0 [mlx5_core]
      [176805.917647]  tcf_block_unbind+0x12d/0x330
      [176805.918239]  tcf_block_offload_cmd.isra.0+0x24e/0x320
      [176805.918953]  ? tcf_block_bind+0x770/0x770
      [176805.919551]  ? _raw_read_unlock_irqrestore+0x30/0x30
      [176805.920236]  ? mutex_lock+0x7d/0xd0
      [176805.920735]  ? mutex_unlock+0x80/0xd0
      [176805.921255]  tcf_block_offload_unbind+0xa5/0x120
      [176805.921909]  __tcf_block_put+0xc2/0x2d0
      [176805.922467]  ingress_destroy+0xf4/0x3d0 [sch_ingress]
      [176805.923178]  __qdisc_destroy+0x9d/0x280
      [176805.923741]  dev_shutdown+0x1c6/0x330
      [176805.924295]  unregister_netdevice_many_notify+0x6ef/0x1500
      [176805.925034]  ? netdev_freemem+0x50/0x50
      [176805.925610]  ? _raw_spin_lock_irq+0x7b/0xd0
      [176805.926235]  ? _raw_spin_lock_bh+0xe0/0xe0
      [176805.926849]  unregister_netdevice_queue+0x1e0/0x280
      [176805.927592]  ? unregister_netdevice_many+0x10/0x10
      [176805.928275]  unregister_netdev+0x18/0x20
      [176805.928835]  mlx5e_vport_rep_unload+0xc0/0x200 [mlx5_core]
      [176805.929608]  mlx5_esw_offloads_unload_rep+0x9d/0xc0 [mlx5_core]
      [176805.930492]  mlx5_eswitch_unload_vf_vports+0x108/0x1a0 [mlx5_core]
      [176805.931422]  ? mlx5_eswitch_unload_sf_vport+0x50/0x50 [mlx5_core]
      [176805.932304]  ? rwsem_down_write_slowpath+0x11f0/0x11f0
      [176805.932987]  mlx5_eswitch_disable_sriov+0x6f9/0xa60 [mlx5_core]
      [176805.933807]  ? mlx5_core_disable_hca+0xe1/0x130 [mlx5_core]
      [176805.934576]  ? mlx5_eswitch_disable_locked+0x580/0x580 [mlx5_core]
      [176805.935463]  mlx5_device_disable_sriov+0x138/0x490 [mlx5_core]
      [176805.936308]  mlx5_sriov_disable+0x8c/0xb0 [mlx5_core]
      [176805.937063]  remove_one+0x7f/0x210 [mlx5_core]
      [176805.937711]  pci_device_remove+0x96/0x1c0
      [176805.938289]  device_release_driver_internal+0x361/0x520
      [176805.938981]  ? kobject_put+0x5c/0x330
      [176805.939553]  driver_detach+0xd7/0x1d0
      [176805.940101]  bus_remove_driver+0x11f/0x290
      [176805.943847]  pci_unregister_driver+0x23/0x1f0
      [176805.944505]  mlx5_cleanup+0xc/0x20 [mlx5_core]
      [176805.945189]  __x64_sys_delete_module+0x2b3/0x450
      [176805.945837]  ? module_flags+0x300/0x300
      [176805.946377]  ? dput+0xc2/0x830
      [176805.946848]  ? __kasan_record_aux_stack+0x9c/0xb0
      [176805.947555]  ? __call_rcu_common.constprop.0+0x46c/0xb50
      [176805.948338]  ? fpregs_assert_state_consistent+0x1d/0xa0
      [176805.949055]  ? exit_to_user_mode_prepare+0x30/0x120
      [176805.949713]  do_syscall_64+0x3d/0x90
      [176805.950226]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
      [176805.950904] RIP: 0033:0x7f7f42c3f5ab
      [176805.951462] Code: 73 01 c3 48 8b 0d 75 a8 1b 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 45 a8 1b 00 f7 d8 64 89 01 48
      [176805.953710] RSP: 002b:00007fff07dc9d08 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
      [176805.954691] RAX: ffffffffffffffda RBX: 000055b6e91c01e0 RCX: 00007f7f42c3f5ab
      [176805.955691] RDX: 0000000000000000 RSI: 0000000000000800 RDI: 000055b6e91c0248
      [176805.956662] RBP: 000055b6e91c01e0 R08: 0000000000000000 R09: 0000000000000000
      [176805.957601] R10: 00007f7f42d9eac0 R11: 0000000000000206 R12: 000055b6e91c0248
      [176805.958593] R13: 0000000000000000 R14: 000055b6e91bfb38 R15: 0000000000000000
      [176805.959599]  </TASK>
      
      [176805.960324] Allocated by task 20490:
      [176805.960893]  kasan_save_stack+0x1e/0x40
      [176805.961463]  kasan_set_track+0x21/0x30
      [176805.962019]  __kasan_kmalloc+0x77/0x90
      [176805.962554]  esw_offloads_init+0x1bb/0x480 [mlx5_core]
      [176805.963318]  mlx5_eswitch_init+0xc70/0x15c0 [mlx5_core]
      [176805.964092]  mlx5_init_one_devl_locked+0x366/0x1230 [mlx5_core]
      [176805.964902]  probe_one+0x6f7/0xc90 [mlx5_core]
      [176805.965541]  local_pci_probe+0xd7/0x180
      [176805.966075]  pci_device_probe+0x231/0x6f0
      [176805.966631]  really_probe+0x1d4/0xb50
      [176805.967179]  __driver_probe_device+0x18d/0x450
      [176805.967810]  driver_probe_device+0x49/0x120
      [176805.968431]  __driver_attach+0x1fb/0x490
      [176805.968976]  bus_for_each_dev+0xed/0x170
      [176805.969560]  bus_add_driver+0x21a/0x570
      [176805.970124]  driver_register+0x133/0x460
      [176805.970684]  0xffffffffa0678065
      [176805.971180]  do_one_initcall+0x92/0x2b0
      [176805.971744]  do_init_module+0x22d/0x720
      [176805.972318]  load_module+0x58c3/0x63b0
      [176805.972847]  init_module_from_file+0xd2/0x130
      [176805.973441]  __x64_sys_finit_module+0x389/0x7c0
      [176805.974045]  do_syscall_64+0x3d/0x90
      [176805.974556]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
      
      [176805.975566] Freed by task 27280:
      [176805.976077]  kasan_save_stack+0x1e/0x40
      [176805.976655]  kasan_set_track+0x21/0x30
      [176805.977221]  kasan_save_free_info+0x27/0x40
      [176805.977834]  ____kasan_slab_free+0x11a/0x1b0
      [176805.978505]  __kmem_cache_free+0x163/0x2d0
      [176805.979113]  esw_offloads_cleanup_reps+0xb8/0x120 [mlx5_core]
      [176805.979963]  mlx5_eswitch_cleanup+0x182/0x270 [mlx5_core]
      [176805.980763]  mlx5_cleanup_once+0x9a/0x1e0 [mlx5_core]
      [176805.981477]  mlx5_uninit_one+0xa9/0x180 [mlx5_core]
      [176805.982196]  remove_one+0x8f/0x210 [mlx5_core]
      [176805.982868]  pci_device_remove+0x96/0x1c0
      [176805.983461]  device_release_driver_internal+0x361/0x520
      [176805.984169]  driver_detach+0xd7/0x1d0
      [176805.984702]  bus_remove_driver+0x11f/0x290
      [176805.985261]  pci_unregister_driver+0x23/0x1f0
      [176805.985847]  mlx5_cleanup+0xc/0x20 [mlx5_core]
      [176805.986483]  __x64_sys_delete_module+0x2b3/0x450
      [176805.987126]  do_syscall_64+0x3d/0x90
      [176805.987665]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
      
      [176805.988667] Last potentially related work creation:
      [176805.989305]  kasan_save_stack+0x1e/0x40
      [176805.989839]  __kasan_record_aux_stack+0x9c/0xb0
      [176805.990443]  kvfree_call_rcu+0x84/0xa30
      [176805.990973]  clean_xps_maps+0x265/0x6e0
      [176805.991547]  netif_reset_xps_queues.part.0+0x3f/0x80
      [176805.992226]  unregister_netdevice_many_notify+0xfcf/0x1500
      [176805.992966]  unregister_netdevice_queue+0x1e0/0x280
      [176805.993638]  unregister_netdev+0x18/0x20
      [176805.994205]  mlx5e_remove+0xba/0x1e0 [mlx5_core]
      [176805.994872]  auxiliary_bus_remove+0x52/0x70
      [176805.995490]  device_release_driver_internal+0x361/0x520
      [176805.996196]  bus_remove_device+0x1e1/0x3d0
      [176805.996767]  device_del+0x390/0x980
      [176805.997270]  mlx5_rescan_drivers_locked.part.0+0x130/0x540 [mlx5_core]
      [176805.998195]  mlx5_unregister_device+0x77/0xc0 [mlx5_core]
      [176805.998989]  mlx5_uninit_one+0x41/0x180 [mlx5_core]
      [176805.999719]  remove_one+0x8f/0x210 [mlx5_core]
      [176806.000387]  pci_device_remove+0x96/0x1c0
      [176806.000938]  device_release_driver_internal+0x361/0x520
      [176806.001612]  unbind_store+0xd8/0xf0
      [176806.002108]  kernfs_fop_write_iter+0x2c0/0x440
      [176806.002748]  vfs_write+0x725/0xba0
      [176806.003294]  ksys_write+0xed/0x1c0
      [176806.003823]  do_syscall_64+0x3d/0x90
      [176806.004357]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
      
      [176806.005317] The buggy address belongs to the object at ffff888155090a80
                       which belongs to the cache kmalloc-64 of size 64
      [176806.006774] The buggy address is located 32 bytes inside of
                       freed 64-byte region [ffff888155090a80, ffff888155090ac0)
      
      [176806.008773] The buggy address belongs to the physical page:
      [176806.009480] page:00000000a407e0e6 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x155090
      [176806.010633] flags: 0x200000000000800(slab|node=0|zone=2)
      [176806.011352] page_type: 0xffffffff()
      [176806.011905] raw: 0200000000000800 ffff888100042640 ffffea000422b1c0 dead000000000004
      [176806.012949] raw: 0000000000000000 0000000000200020 00000001ffffffff 0000000000000000
      [176806.013933] page dumped because: kasan: bad access detected
      
      [176806.014935] Memory state around the buggy address:
      [176806.015601]  ffff888155090980: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      [176806.016568]  ffff888155090a00: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      [176806.017497] >ffff888155090a80: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      [176806.018438]                                ^
      [176806.019007]  ffff888155090b00: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      [176806.020001]  ffff888155090b80: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      [176806.020996] ==================================================================
      
      Fixes: a508728a
      
       ("net/mlx5e: VF tunnel RX traffic offloading")
      Signed-off-by: default avatarVlad Buslov <vladbu@nvidia.com>
      Reviewed-by: default avatarRoi Dayan <roid@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      96c8c465
    • Moshe Shemesh's avatar
      net/mlx5: Fix fw tracer first block check · d4d25b7b
      Moshe Shemesh authored
      [ Upstream commit 4261edf1 ]
      
      While handling new traces, to verify it is not the first block being
      written, last_timestamp is checked. But instead of checking it is non
      zero it is verified to be zero. Fix to verify last_timestamp is not
      zero.
      
      Fixes: c71ad41c
      
       ("net/mlx5: FW tracer, events handling")
      Signed-off-by: default avatarMoshe Shemesh <moshe@nvidia.com>
      Reviewed-by: default avatarFeras Daoud <ferasda@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d4d25b7b
    • Carolina Jubran's avatar
      net/mlx5e: XDP, Drop fragmented packets larger than MTU size · 8bcb51d0
      Carolina Jubran authored
      [ Upstream commit bcaf109f ]
      
      XDP transmits fragmented packets that are larger than MTU size instead of
      dropping those packets. The drop check that checks whether a packet is larger
      than MTU is comparing MTU size against the linear part length only.
      
      Adjust the drop check to compare MTU size against both linear and non-linear
      part lengths to avoid transmitting fragmented packets larger than MTU size.
      
      Fixes: 39a1665d
      
       ("net/mlx5e: Implement sending multi buffer XDP frames")
      Signed-off-by: default avatarCarolina Jubran <cjubran@nvidia.com>
      Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8bcb51d0
    • Chris Mi's avatar
      net/mlx5e: Decrease num_block_tc when unblock tc offload · 2da82046
      Chris Mi authored
      [ Upstream commit be86106f ]
      
      The cited commit increases num_block_tc when unblock tc offload.
      Actually should decrease it.
      
      Fixes: c8e350e6
      
       ("net/mlx5e: Make TC and IPsec offloads mutually exclusive on a netdev")
      Signed-off-by: default avatarChris Mi <cmi@nvidia.com>
      Reviewed-by: default avatarJianbo Liu <jianbol@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2da82046
    • Jianbo Liu's avatar
      net/mlx5e: Fix overrun reported by coverity · 595d51b2
      Jianbo Liu authored
      [ Upstream commit da75fa54 ]
      
      Coverity Scan reports the following issue. But it's impossible that
      mlx5_get_dev_index returns 7 for PF, even if the index is calculated
      from PCI FUNC ID. So add the checking to make coverity slience.
      
      CID 610894 (#2 of 2): Out-of-bounds write (OVERRUN)
      Overrunning array esw->fdb_table.offloads.peer_miss_rules of 4 8-byte
      elements at element index 7 (byte offset 63) using index
      mlx5_get_dev_index(peer_dev) (which evaluates to 7).
      
      Fixes: 9bee385a
      
       ("net/mlx5: E-switch, refactor FDB miss rule add/remove")
      Signed-off-by: default avatarJianbo Liu <jianbol@nvidia.com>
      Reviewed-by: default avatarRoi Dayan <roid@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      595d51b2
    • Dinghao Liu's avatar
      net/mlx5e: fix a potential double-free in fs_udp_create_groups · 2f4d6328
      Dinghao Liu authored
      [ Upstream commit e75efc64 ]
      
      When kcalloc() for ft->g succeeds but kvzalloc() for in fails,
      fs_udp_create_groups() will free ft->g. However, its caller
      fs_udp_create_table() will free ft->g again through calling
      mlx5e_destroy_flow_table(), which will lead to a double-free.
      Fix this by setting ft->g to NULL in fs_udp_create_groups().
      
      Fixes: 1c80bd68
      
       ("net/mlx5e: Introduce Flow Steering UDP API")
      Signed-off-by: default avatarDinghao Liu <dinghao.liu@zju.edu.cn>
      Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2f4d6328