diff options
| author | Shin'ichiro Kawasaki <[email protected]> | 2025-07-31 11:07:45 +0000 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2025-07-31 21:01:07 +0000 |
| commit | 765761851d89c772f482494d452e266795460278 (patch) | |
| tree | 30237b78e38a3c56733dd6e24e9786cb8e198817 /scripts/bpf_doc.py | |
| parent | block: Fix default IO priority if there is no IO context (diff) | |
| download | kernel-765761851d89c772f482494d452e266795460278.tar.gz kernel-765761851d89c772f482494d452e266795460278.zip | |
zloop: fix KASAN use-after-free of tag set
When a zoned loop device, or zloop device, is removed, KASAN enabled
kernel reports "BUG KASAN use-after-free" in blk_mq_free_tag_set(). The
BUG happens because zloop_ctl_remove() calls put_disk(), which invokes
zloop_free_disk(). The zloop_free_disk() frees the memory allocated for
the zlo pointer. However, after the memory is freed, zloop_ctl_remove()
calls blk_mq_free_tag_set(&zlo->tag_set), which accesses the freed zlo.
Hence the KASAN use-after-free.
zloop_ctl_remove()
put_disk(zlo->disk)
put_device()
kobject_put()
...
zloop_free_disk()
kvfree(zlo)
blk_mq_free_tag_set(&zlo->tag_set)
To avoid the BUG, move the call to blk_mq_free_tag_set(&zlo->tag_set)
from zloop_ctl_remove() into zloop_free_disk(). This ensures that
the tag_set is freed before the call to kvfree(zlo).
Fixes: eb0570c7df23 ("block: new zoned loop block device driver")
CC: [email protected]
Signed-off-by: Shin'ichiro Kawasaki <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
Diffstat (limited to 'scripts/bpf_doc.py')
0 files changed, 0 insertions, 0 deletions
