summaryrefslogtreecommitdiff
path: root/include/uapi/linux/errqueue.h
diff options
context:
space:
mode:
authorGiorgi Kobakhia <gkobakhi@asu.edu>2026-09-28 13:04:45 -0700
committerJan Kara <jack@suse.cz>2026-10-02 12:54:49 +0200
commit0f242ca0878896df30292f4922700a32e8fdd039 (patch)
treed2466d8631fbc8b1b3bbcfa5d3d116ee64df93c8 /include/uapi/linux/errqueue.h
parente646566b4ad537286ebee65a55de460003a7bf90 (diff)
downloadlinux-next-0f242ca0878896df30292f4922700a32e8fdd039.tar.gz
linux-next-0f242ca0878896df30292f4922700a32e8fdd039.zip
udf: fix return value for non-recorded-allocated extents in udf_map_block()
When someone creates a corrupted UDF filesystem where symlink contains other extent type than EXT_RECORDED_ALLOCATED, it can leads to a crash like: Oops: general protection fault KASAN: maybe wild-memory-access RIP: 0010:page_get_link (fs/namei.c:6503) Call Trace: vfs_readlink (fs/namei.c:6419) do_readlinkat (fs/stat.c:583) __x64_sys_readlink (fs/stat.c:605 fs/stat.c:602 fs/stat.c:602) This is because in this case udf_map_block() fails to convert return value of inode_bmap() from 1 to 0. Returned '1' propagates through udf_bread() all the way up to __page_get_link() where it ends up being treated as a folio pointer with obvious results. Move the reset to 0 line outside the if, so udf_map_block() returns either 0 or -errno, even if the extent type is not EXT_RECORDED_ALLOCATED. Fixes: c226964ec786 ("udf: refactor inode_bmap() to handle error") Cc: stable@vger.kernel.org Assisted-by: LLM Tested-by: Xiang Mei <xmei5@asu.edu> Signed-off-by: Giorgi Kobakhia <gkobakhi@asu.edu> Link: https://patch.msgid.link/20260928200445.18722-1-gkobakhi@asu.edu Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'include/uapi/linux/errqueue.h')
0 files changed, 0 insertions, 0 deletions