lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CAOQ4uxhxSetEOxdLiG=UgDdZqG-Giz4d5425kXtTNxAfbwybzg@mail.gmail.com> Date: Wed, 30 Jun 2021 06:14:11 +0300 From: Amir Goldstein <amir73il@...il.com> To: Gabriel Krisman Bertazi <krisman@...labora.com> Cc: "Darrick J. Wong" <djwong@...nel.org>, Theodore Tso <tytso@....edu>, Dave Chinner <david@...morbit.com>, Jan Kara <jack@...e.com>, David Howells <dhowells@...hat.com>, Khazhismel Kumykov <khazhy@...gle.com>, linux-fsdevel <linux-fsdevel@...r.kernel.org>, Ext4 <linux-ext4@...r.kernel.org>, kernel@...labora.com Subject: Re: [PATCH v3 03/15] fanotify: Split fsid check from other fid mode checks On Tue, Jun 29, 2021 at 10:12 PM Gabriel Krisman Bertazi <krisman@...labora.com> wrote: > > FAN_FS_ERROR will require fsid, but not necessarily require the > filesystem to expose a file handle. Split those checks into different > functions, so they can be used separately when setting up an event. > > While there, update a comment about tmpfs having 0 fsid, which is no > longer true. > > Signed-off-by: Gabriel Krisman Bertazi <krisman@...labora.com> > Reviewed-by: Amir Goldstein <amir73il@...il.com> > --- > Changes since v2: > - FAN_ERROR -> FAN_FS_ERROR (Amir) > - Update comment (Amir) > > Changes since v1: > (Amir) > - Sort hunks to simplify diff. > Changes since RFC: > (Amir) > - Rename fanotify_check_path_fsid -> fanotify_test_fsid. > - Use dentry directly instead of path. > --- > fs/notify/fanotify/fanotify_user.c | 27 ++++++++++++++++++--------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c > index 68a53d3534f8..67b18dfe0025 100644 > --- a/fs/notify/fanotify/fanotify_user.c > +++ b/fs/notify/fanotify/fanotify_user.c > @@ -1192,16 +1192,15 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags) > return fd; > } > > -/* Check if filesystem can encode a unique fid */ > -static int fanotify_test_fid(struct path *path, __kernel_fsid_t *fsid) > +static int fanotify_test_fsid(struct dentry *dentry, __kernel_fsid_t *fsid) > { > __kernel_fsid_t root_fsid; > int err; > > /* > - * Make sure path is not in filesystem with zero fsid (e.g. tmpfs). > + * Make sure dentry is not of a filesystem with zero fsid (e.g. fuse). > */ > - err = vfs_get_fsid(path->dentry, fsid); > + err = vfs_get_fsid(dentry, fsid); > if (err) > return err; > > @@ -1209,10 +1208,10 @@ static int fanotify_test_fid(struct path *path, __kernel_fsid_t *fsid) > return -ENODEV; > > /* > - * Make sure path is not inside a filesystem subvolume (e.g. btrfs) > + * Make sure dentry is not of a filesystem subvolume (e.g. btrfs) > * which uses a different fsid than sb root. > */ > - err = vfs_get_fsid(path->dentry->d_sb->s_root, &root_fsid); > + err = vfs_get_fsid(dentry->d_sb->s_root, &root_fsid); > if (err) > return err; > > @@ -1220,6 +1219,12 @@ static int fanotify_test_fid(struct path *path, __kernel_fsid_t *fsid) > root_fsid.val[1] != fsid->val[1]) > return -EXDEV; > > + return 0; > +} > + > +/* Check if filesystem can encode a unique fid */ > +static int fanotify_test_fid(struct dentry *dentry) > +{ > /* > * We need to make sure that the file system supports at least > * encoding a file handle so user can use name_to_handle_at() to > @@ -1227,8 +1232,8 @@ static int fanotify_test_fid(struct path *path, __kernel_fsid_t *fsid) > * objects. However, name_to_handle_at() requires that the > * filesystem also supports decoding file handles. > */ > - if (!path->dentry->d_sb->s_export_op || > - !path->dentry->d_sb->s_export_op->fh_to_dentry) > + if (!dentry->d_sb->s_export_op || > + !dentry->d_sb->s_export_op->fh_to_dentry) > return -EOPNOTSUPP; > > return 0; > @@ -1379,7 +1384,11 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, > } > > if (fid_mode) { > - ret = fanotify_test_fid(&path, &__fsid); > + ret = fanotify_test_fsid(path.dentry, &__fsid); > + if (ret) > + goto path_put_and_out; > + > + ret = fanotify_test_fid(path.dentry); > if (ret) > goto path_put_and_out; > > -- > 2.32.0 >
Powered by blists - more mailing lists