android_kernel_motorola_sm6375/drivers/block
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Yu Kuai 8a7da4ced2 nbd: fix race between nbd_alloc_config() and module removal
[ Upstream commit c55b2b983b0fa012942c3eb16384b2b722caa810 ]

When nbd module is being removing, nbd_alloc_config() may be
called concurrently by nbd_genl_connect(), although try_module_get()
will return false, but nbd_alloc_config() doesn't handle it.

The race may lead to the leak of nbd_config and its related
resources (e.g, recv_workq) and oops in nbd_read_stat() due
to the unload of nbd module as shown below:

  BUG: kernel NULL pointer dereference, address: 0000000000000040
  Oops: 0000 [#1] SMP PTI
  CPU: 5 PID: 13840 Comm: kworker/u17:33 Not tainted 5.14.0+ #1
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
  Workqueue: knbd16-recv recv_work [nbd]
  RIP: 0010:nbd_read_stat.cold+0x130/0x1a4 [nbd]
  Call Trace:
   recv_work+0x3b/0xb0 [nbd]
   process_one_work+0x1ed/0x390
   worker_thread+0x4a/0x3d0
   kthread+0x12a/0x150
   ret_from_fork+0x22/0x30

Fixing it by checking the return value of try_module_get()
in nbd_alloc_config(). As nbd_alloc_config() may return ERR_PTR(-ENODEV),
assign nbd->config only when nbd_alloc_config() succeeds to ensure
the value of nbd->config is binary (valid or NULL).

Also adding a debug message to check the reference counter
of nbd_config during module removal.

Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Link: https://lore.kernel.org/r/20220521073749.3146892-3-yukuai3@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-06-14 18:12:01 +02:00
..
aoe
drbd drbd: fix duplicate array initializer 2022-06-14 18:11:33 +02:00
mtip32xx
paride
rsxx block: rsxx: fix error return code of rsxx_pci_probe() 2021-03-17 17:03:56 +01:00
xen-blkback xen-blkback: fix compatibility bug with single page rings 2021-05-14 09:44:23 +02:00
zram zram: off by one in read_block_state() 2021-11-17 09:48:47 +01:00
amiflop.c
ataflop.c block: ataflop: fix breakage introduced at blk-mq refactoring 2021-11-17 09:48:38 +01:00
brd.c
cryptoloop.c cryptoloop: add a deprecation warning 2021-09-12 08:56:40 +02:00
floppy.c floppy: use a statically allocated error counter 2022-05-25 09:14:31 +02:00
Kconfig floppy: disable FDRAWCMD by default 2022-05-09 09:03:20 +02:00
loop.c loop: use sysfs_emit() in the sysfs xxx show() 2022-04-15 14:18:22 +02:00
loop.h
Makefile
nbd.c nbd: fix race between nbd_alloc_config() and module removal 2022-06-14 18:12:01 +02:00
null_blk.h
null_blk_main.c
null_blk_zoned.c drivers/block/null_blk/main: Fix a double free in null_init. 2021-05-14 09:44:26 +02:00
pktcdvd.c
ps3disk.c
ps3vram.c
rbd.c rbd: always kick acquire on "acquired" and "released" notifications 2021-07-28 13:31:01 +02:00
rbd_types.h
skd_main.c
skd_s1120.h
sunvdc.c
swim.c
swim3.c
swim_asm.S
sx8.c
umem.c
umem.h
virtio_blk.c virtio_blk: fix the discard_granularity and discard_alignment queue limits 2022-06-14 18:11:35 +02:00
xen-blkfront.c xen/blkfront: don't use gnttab_query_foreign_access() for mapped status 2022-03-11 11:22:39 +01:00
xsysace.c
z2ram.c