Commit 36e28c42 authored by Amir Goldstein's avatar Amir Goldstein Committed by Christian Brauner

fsnotify: split fsnotify_perm() into two hooks

We would like to make changes to the fsnotify access permission hook -
add file range arguments and add the pre modify event.

In preparation for these changes, split the fsnotify_perm() hook into
fsnotify_open_perm() and fsnotify_file_perm().

This is needed for fanotify "pre content" events.
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
Link: https://lore.kernel.org/r/20231212094440.250945-4-amir73il@gmail.comSigned-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 705bcfcb
...@@ -100,29 +100,33 @@ static inline int fsnotify_file(struct file *file, __u32 mask) ...@@ -100,29 +100,33 @@ static inline int fsnotify_file(struct file *file, __u32 mask)
return fsnotify_parent(path->dentry, mask, path, FSNOTIFY_EVENT_PATH); return fsnotify_parent(path->dentry, mask, path, FSNOTIFY_EVENT_PATH);
} }
/* Simple call site for access decisions */ /*
static inline int fsnotify_perm(struct file *file, int mask) * fsnotify_file_perm - permission hook before file access
*/
static inline int fsnotify_file_perm(struct file *file, int perm_mask)
{ {
int ret; __u32 fsnotify_mask = FS_ACCESS_PERM;
__u32 fsnotify_mask = 0;
if (!(mask & (MAY_READ | MAY_OPEN))) if (!(perm_mask & MAY_READ))
return 0; return 0;
if (mask & MAY_OPEN) { return fsnotify_file(file, fsnotify_mask);
fsnotify_mask = FS_OPEN_PERM; }
if (file->f_flags & __FMODE_EXEC) { /*
ret = fsnotify_file(file, FS_OPEN_EXEC_PERM); * fsnotify_open_perm - permission hook before file open
*/
static inline int fsnotify_open_perm(struct file *file)
{
int ret;
if (ret) if (file->f_flags & __FMODE_EXEC) {
return ret; ret = fsnotify_file(file, FS_OPEN_EXEC_PERM);
} if (ret)
} else if (mask & MAY_READ) { return ret;
fsnotify_mask = FS_ACCESS_PERM;
} }
return fsnotify_file(file, fsnotify_mask); return fsnotify_file(file, FS_OPEN_PERM);
} }
/* /*
......
...@@ -2586,7 +2586,7 @@ int security_file_permission(struct file *file, int mask) ...@@ -2586,7 +2586,7 @@ int security_file_permission(struct file *file, int mask)
if (ret) if (ret)
return ret; return ret;
return fsnotify_perm(file, mask); return fsnotify_file_perm(file, mask);
} }
/** /**
...@@ -2837,7 +2837,7 @@ int security_file_open(struct file *file) ...@@ -2837,7 +2837,7 @@ int security_file_open(struct file *file)
if (ret) if (ret)
return ret; return ret;
return fsnotify_perm(file, MAY_OPEN); return fsnotify_open_perm(file);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment