Skip to content

Commit 8bd90b6

Browse files
lostjefflehsiangkao
authored andcommitted
erofs: fix NULL dereference of dif->bdev_handle in fscache mode
Avoid NULL dereference of dif->bdev_handle, as dif->bdev_handle is NULL in fscache mode. BUG: kernel NULL pointer dereference, address: 0000000000000000 RIP: 0010:erofs_map_dev+0xbd/0x1c0 Call Trace: <TASK> erofs_fscache_data_read_slice+0xa7/0x340 erofs_fscache_data_read+0x11/0x30 erofs_fscache_readahead+0xd9/0x100 read_pages+0x47/0x1f0 page_cache_ra_order+0x1e5/0x270 filemap_get_pages+0xf2/0x5f0 filemap_read+0xb8/0x2e0 vfs_read+0x18d/0x2b0 ksys_read+0x53/0xd0 do_syscall_64+0x42/0xf0 entry_SYSCALL_64_after_hwframe+0x6e/0x76 Reported-by: Yiqun Leng <[email protected]> Closes: https://bugzilla.openanolis.cn/show_bug.cgi?id=7245 Fixes: 4984572 ("erofs: Convert to use bdev_open_by_path()") Signed-off-by: Jingbo Xu <[email protected]> Reviewed-by: Gao Xiang <[email protected]> Reviewed-by: Yue Hu <[email protected]> Reviewed-by: Chao Yu <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Gao Xiang <[email protected]>
1 parent 914fa86 commit 8bd90b6

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

fs/erofs/data.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map)
220220
up_read(&devs->rwsem);
221221
return 0;
222222
}
223-
map->m_bdev = dif->bdev_handle->bdev;
223+
map->m_bdev = dif->bdev_handle ? dif->bdev_handle->bdev : NULL;
224224
map->m_daxdev = dif->dax_dev;
225225
map->m_dax_part_off = dif->dax_part_off;
226226
map->m_fscache = dif->fscache;
@@ -238,7 +238,8 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map)
238238
if (map->m_pa >= startoff &&
239239
map->m_pa < startoff + length) {
240240
map->m_pa -= startoff;
241-
map->m_bdev = dif->bdev_handle->bdev;
241+
map->m_bdev = dif->bdev_handle ?
242+
dif->bdev_handle->bdev : NULL;
242243
map->m_daxdev = dif->dax_dev;
243244
map->m_dax_part_off = dif->dax_part_off;
244245
map->m_fscache = dif->fscache;

0 commit comments

Comments
 (0)