diff options
| author | Amir Goldstein <[email protected]> | 2025-06-27 10:48:35 +0000 |
|---|---|---|
| committer | Jan Kara <[email protected]> | 2025-06-27 17:17:26 +0000 |
| commit | 8631e01c2c5d1fe6705bcc0d733a0b7a17d3daac (patch) | |
| tree | 7848f3dcbd213abd23a7c076a7dc528a0432d256 | |
| parent | Merge tag 'block-6.16-20250626' of git://git.kernel.dk/linux (diff) | |
| download | kernel-8631e01c2c5d1fe6705bcc0d733a0b7a17d3daac.tar.gz kernel-8631e01c2c5d1fe6705bcc0d733a0b7a17d3daac.zip | |
fanotify: sanitize handle_type values when reporting fid
Unlike file_handle, type and len of struct fanotify_fh are u8.
Traditionally, filesystem return handle_type < 0xff, but there
is no enforecement for that in vfs.
Add a sanity check in fanotify to avoid truncating handle_type
if its value is > 0xff.
Fixes: 7cdafe6cc4a6 ("exportfs: check for error return value from exportfs_encode_*()")
Signed-off-by: Amir Goldstein <[email protected]>
Signed-off-by: Jan Kara <[email protected]>
Link: https://patch.msgid.link/[email protected]
| -rw-r--r-- | fs/notify/fanotify/fanotify.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 3083643b864b..bfe884d624e7 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -454,7 +454,13 @@ static int fanotify_encode_fh(struct fanotify_fh *fh, struct inode *inode, dwords = fh_len >> 2; type = exportfs_encode_fid(inode, buf, &dwords); err = -EINVAL; - if (type <= 0 || type == FILEID_INVALID || fh_len != dwords << 2) + /* + * Unlike file_handle, type and len of struct fanotify_fh are u8. + * Traditionally, filesystem return handle_type < 0xff, but there + * is no enforecement for that in vfs. + */ + BUILD_BUG_ON(MAX_HANDLE_SZ > 0xff || FILEID_INVALID > 0xff); + if (type <= 0 || type >= FILEID_INVALID || fh_len != dwords << 2) goto out_err; fh->type = type; |
