linux/drivers/net
Jialiang Wang 02e1a114fd nfp: fix use-after-free in area_cache_get()
area_cache_get() is used to distribute cache->area and set cache->id,
 and if cache->id is not 0 and cache->area->kref refcount is 0, it will
 release the cache->area by nfp_cpp_area_release(). area_cache_get()
 set cache->id before cpp->op->area_init() and nfp_cpp_area_acquire().

But if area_init() or nfp_cpp_area_acquire() fails, the cache->id is
 is already set but the refcount is not increased as expected. At this
 time, calling the nfp_cpp_area_release() will cause use-after-free.

To avoid the use-after-free, set cache->id after area_init() and
 nfp_cpp_area_acquire() complete successfully.

Note: This vulnerability is triggerable by providing emulated device
 equipped with specified configuration.

 BUG: KASAN: use-after-free in nfp6000_area_init (drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c:760)
  Write of size 4 at addr ffff888005b7f4a0 by task swapper/0/1

 Call Trace:
  <TASK>
 nfp6000_area_init (drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c:760)
 area_cache_get.constprop.8 (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:884)

 Allocated by task 1:
 nfp_cpp_area_alloc_with_name (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:303)
 nfp_cpp_area_cache_add (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:802)
 nfp6000_init (drivers/net/ethernet/netronome/nfp/nfpcore/nfp6000_pcie.c:1230)
 nfp_cpp_from_operations (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:1215)
 nfp_pci_probe (drivers/net/ethernet/netronome/nfp/nfp_main.c:744)

 Freed by task 1:
 kfree (mm/slub.c:4562)
 area_cache_get.constprop.8 (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:873)
 nfp_cpp_read (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:924 drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c:973)
 nfp_cpp_readl (drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cpplib.c:48)

Signed-off-by: Jialiang Wang <wangjialiang0806@163.com>
Reviewed-by: Yinjun Zhang <yinjun.zhang@corigine.com>
Acked-by: Simon Horman <simon.horman@corigine.com>
Link: https://lore.kernel.org/r/20220810073057.4032-1-wangjialiang0806@163.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2022-08-11 09:02:26 -07:00
..
appletalk
arcnet
bonding bonding: fix reference count leak in balance-alb mode 2022-08-11 08:51:05 -07:00
caif caif_virtio: fix race between virtio_device_ready() and ndo_open() 2022-06-27 08:04:30 -04:00
can can: mcp251x: Fix race condition on receive interrupt 2022-08-09 21:40:22 +02:00
dsa net: dsa: felix: suppress non-changes to the tagging protocol 2022-08-09 12:13:03 -07:00
ethernet nfp: fix use-after-free in area_cache_get() 2022-08-11 09:02:26 -07:00
fddi fddi/skfp: fix repeated words in comments 2022-07-11 14:12:54 +01:00
fjes
hamradio
hippi
hyperv
ieee802154
ipa Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-28 18:21:16 -07:00
ipvlan
mctp
mdio
netdevsim Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-08-03 09:04:55 +02:00
pcs Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-28 18:21:16 -07:00
phy net: phy: dp83867: fix get nvmem cell fail 2022-08-08 20:57:03 -07:00
plip plip: avoid rcu debug splat 2022-08-09 12:16:02 -07:00
ppp
slip
team
usb net: usb: qmi_wwan: Add support for Cinterion MV32 2022-08-11 07:58:42 -07:00
vmxnet3 vmxnet3: do not reschedule napi for rx processing 2022-07-29 12:11:23 +01:00
vxlan vxlan: do not use RT_TOS for IPv6 flowlabel 2022-08-09 22:19:20 -07:00
wan
wireguard wireguard: allowedips: don't corrupt stack when detecting overflow 2022-08-02 13:47:50 -07:00
wireless wifi: wilc1000: fix spurious inline in wilc_handle_disconnect() 2022-08-08 11:11:04 +03:00
wwan
xen-netback Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-14 15:27:35 -07:00
amt.c amt: fix typo in comment 2022-07-28 22:21:51 -07:00
bareudp.c
dummy.c
eql.c
geneve.c geneve: do not use RT_TOS for IPv6 flowlabel 2022-08-09 22:19:20 -07:00
gtp.c
ifb.c
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-07 12:07:37 -07:00
LICENSE.SRC
loopback.c
macsec.c macsec: Fix traffic counters/statistics 2022-08-10 13:45:06 +01:00
macvlan.c
macvtap.c
Makefile
mdio.c
mhi_net.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c net: sungem_phy: Add of_node_put() for reference returned by of_get_parent() 2022-07-21 19:04:19 -07:00
tap.c net: tap: NULL pointer derefence in dev_parse_header_protocol when skb->dev is null 2022-08-05 08:56:35 +01:00
thunderbolt.c
tun.c net: tun: avoid disabling NAPI twice 2022-06-30 11:34:10 -07:00
veth.c Revert "veth: Add updating of trans_start" 2022-08-03 19:20:13 -07:00
virtio_net.c virtio_net: fix memory leak inside XPD_TX with mergeable 2022-08-08 09:43:55 +01:00
vrf.c
vsockmon.c
xen-netfront.c xen-netfront: re-order error checks in xennet_get_responses() 2022-07-14 12:20:18 +02:00