| From 98b5d221d5c7efd3a05fe852fcd6568c4ac46b12 Mon Sep 17 00:00:00 2001 |
| From: Bart Van Assche <bvanassche@acm.org> |
| Date: Mon, 9 Mar 2020 21:26:22 -0700 |
| Subject: [PATCH] null_blk: Handle null_add_dev() failures properly |
| |
| commit 9b03b713082a31a5b90e0a893c72aa620e255c26 upstream. |
| |
| If null_add_dev() fails then null_del_dev() is called with a NULL argument. |
| Make null_del_dev() handle this scenario correctly. This patch fixes the |
| following KASAN complaint: |
| |
| null-ptr-deref in null_del_dev+0x28/0x280 [null_blk] |
| Read of size 8 at addr 0000000000000000 by task find/1062 |
| |
| Call Trace: |
| dump_stack+0xa5/0xe6 |
| __kasan_report.cold+0x65/0x99 |
| kasan_report+0x16/0x20 |
| __asan_load8+0x58/0x90 |
| null_del_dev+0x28/0x280 [null_blk] |
| nullb_group_drop_item+0x7e/0xa0 [null_blk] |
| client_drop_item+0x53/0x80 [configfs] |
| configfs_rmdir+0x395/0x4e0 [configfs] |
| vfs_rmdir+0xb6/0x220 |
| do_rmdir+0x238/0x2c0 |
| __x64_sys_unlinkat+0x75/0x90 |
| do_syscall_64+0x6f/0x2f0 |
| entry_SYSCALL_64_after_hwframe+0x49/0xbe |
| |
| Signed-off-by: Bart Van Assche <bvanassche@acm.org> |
| Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> |
| Cc: Johannes Thumshirn <jth@kernel.org> |
| Cc: Hannes Reinecke <hare@suse.com> |
| Cc: Ming Lei <ming.lei@redhat.com> |
| Cc: Christoph Hellwig <hch@infradead.org> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c |
| index d108b9739142..893497c54a07 100644 |
| --- a/drivers/block/null_blk_main.c |
| +++ b/drivers/block/null_blk_main.c |
| @@ -1376,7 +1376,12 @@ static void cleanup_queues(struct nullb *nullb) |
| |
| static void null_del_dev(struct nullb *nullb) |
| { |
| - struct nullb_device *dev = nullb->dev; |
| + struct nullb_device *dev; |
| + |
| + if (!nullb) |
| + return; |
| + |
| + dev = nullb->dev; |
| |
| ida_simple_remove(&nullb_indexes, nullb->index); |
| |
| -- |
| 2.7.4 |
| |