diff options
author | Johannes Thumshirn <johannes.thumshirn@wdc.com> | 2024-04-25 05:02:39 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2024-04-25 07:47:46 -0600 |
commit | 57787fa42f9fc12fe18938eefc2acb2dc2bde9ae (patch) | |
tree | 491241599c948e3399446cabc01f844596d9cbac | |
parent | a8f59e5a5deaf3e99a8b7252e96cee9af67858a9 (diff) |
block: check if zone_wplugs_hash exists in queue_zone_wplugs_show
Changhui reported a kernel crash when running this simple shell
reproducer:
# cd /sys/kernel/debug/block && find . -type f -exec grep -aH . {} \;
The above results in a NULL pointer dereference if a device does not have
a zone_wplugs_hash allocated.
To fix this, return early if we don't have a zone_wplugs_hash.
Reported-by: Changhui Zhong <czhong@redhat.com>
Fixes: a98b05b02f0f ("block: Replace zone_wlock debugfs entry with zone_wplugs entry")
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/e5fec079dfca448cc21c425cfa5d7b291f5faa67.1714046443.git.johannes.thumshirn@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | block/blk-zoned.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 3a796420f240..bad68277c0b2 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -1774,6 +1774,9 @@ int queue_zone_wplugs_show(void *data, struct seq_file *m) unsigned int zwp_bio_list_size, i; unsigned long flags; + if (!disk->zone_wplugs_hash) + return 0; + rcu_read_lock(); for (i = 0; i < disk_zone_wplugs_hash_size(disk); i++) { hlist_for_each_entry_rcu(zwplug, |