fanotify: Simplify create_fd()

create_fd() is never used with invalid path. Also the only thing it
needs to know from fanotify_event is the path. Simplify the function to
take path directly and assume it is correct.

Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
Jan Kara 2020-03-24 15:27:52 +01:00
parent 55bf882c7f
commit a741c2febe

View file

@ -96,15 +96,12 @@ static struct fsnotify_event *get_one_event(struct fsnotify_group *group,
return fsn_event;
}
static int create_fd(struct fsnotify_group *group,
struct fanotify_event *event,
static int create_fd(struct fsnotify_group *group, struct path *path,
struct file **file)
{
int client_fd;
struct file *new_file;
pr_debug("%s: group=%p event=%p\n", __func__, group, event);
client_fd = get_unused_fd_flags(group->fanotify_data.f_flags);
if (client_fd < 0)
return client_fd;
@ -113,14 +110,9 @@ static int create_fd(struct fsnotify_group *group,
* we need a new file handle for the userspace program so it can read even if it was
* originally opened O_WRONLY.
*/
/* it's possible this event was an overflow event. in that case dentry and mnt
* are NULL; That's fine, just don't call dentry open */
if (event->path.dentry && event->path.mnt)
new_file = dentry_open(&event->path,
group->fanotify_data.f_flags | FMODE_NONOTIFY,
current_cred());
else
new_file = ERR_PTR(-EOVERFLOW);
new_file = dentry_open(path,
group->fanotify_data.f_flags | FMODE_NONOTIFY,
current_cred());
if (IS_ERR(new_file)) {
/*
* we still send an event even if we can't open the file. this
@ -276,9 +268,13 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group,
metadata.pid = pid_vnr(event->pid);
if (fanotify_event_has_path(event)) {
fd = create_fd(group, event, &f);
if (fd < 0)
return fd;
struct path *path = &event->path;
if (path->mnt && path->dentry) {
fd = create_fd(group, path, &f);
if (fd < 0)
return fd;
}
} else if (fanotify_event_has_fid(event)) {
metadata.event_len += fanotify_event_info_len(event);
}