Merge branches 'clk-range', 'clk-uniphier', 'clk-apple' and 'clk-qcom' into clk-next
[linux-2.6-microblaze.git] / fs / notify / fanotify / fanotify_user.c
1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/fanotify.h>
3 #include <linux/fcntl.h>
4 #include <linux/fdtable.h>
5 #include <linux/file.h>
6 #include <linux/fs.h>
7 #include <linux/anon_inodes.h>
8 #include <linux/fsnotify_backend.h>
9 #include <linux/init.h>
10 #include <linux/mount.h>
11 #include <linux/namei.h>
12 #include <linux/poll.h>
13 #include <linux/security.h>
14 #include <linux/syscalls.h>
15 #include <linux/slab.h>
16 #include <linux/types.h>
17 #include <linux/uaccess.h>
18 #include <linux/compat.h>
19 #include <linux/sched/signal.h>
20 #include <linux/memcontrol.h>
21 #include <linux/statfs.h>
22 #include <linux/exportfs.h>
23
24 #include <asm/ioctls.h>
25
26 #include "../../mount.h"
27 #include "../fdinfo.h"
28 #include "fanotify.h"
29
30 #define FANOTIFY_DEFAULT_MAX_EVENTS     16384
31 #define FANOTIFY_OLD_DEFAULT_MAX_MARKS  8192
32 #define FANOTIFY_DEFAULT_MAX_GROUPS     128
33 #define FANOTIFY_DEFAULT_FEE_POOL_SIZE  32
34
35 /*
36  * Legacy fanotify marks limits (8192) is per group and we introduced a tunable
37  * limit of marks per user, similar to inotify.  Effectively, the legacy limit
38  * of fanotify marks per user is <max marks per group> * <max groups per user>.
39  * This default limit (1M) also happens to match the increased limit of inotify
40  * max_user_watches since v5.10.
41  */
42 #define FANOTIFY_DEFAULT_MAX_USER_MARKS \
43         (FANOTIFY_OLD_DEFAULT_MAX_MARKS * FANOTIFY_DEFAULT_MAX_GROUPS)
44
45 /*
46  * Most of the memory cost of adding an inode mark is pinning the marked inode.
47  * The size of the filesystem inode struct is not uniform across filesystems,
48  * so double the size of a VFS inode is used as a conservative approximation.
49  */
50 #define INODE_MARK_COST (2 * sizeof(struct inode))
51
52 /* configurable via /proc/sys/fs/fanotify/ */
53 static int fanotify_max_queued_events __read_mostly;
54
55 #ifdef CONFIG_SYSCTL
56
57 #include <linux/sysctl.h>
58
59 static long ft_zero = 0;
60 static long ft_int_max = INT_MAX;
61
62 static struct ctl_table fanotify_table[] = {
63         {
64                 .procname       = "max_user_groups",
65                 .data   = &init_user_ns.ucount_max[UCOUNT_FANOTIFY_GROUPS],
66                 .maxlen         = sizeof(long),
67                 .mode           = 0644,
68                 .proc_handler   = proc_doulongvec_minmax,
69                 .extra1         = &ft_zero,
70                 .extra2         = &ft_int_max,
71         },
72         {
73                 .procname       = "max_user_marks",
74                 .data   = &init_user_ns.ucount_max[UCOUNT_FANOTIFY_MARKS],
75                 .maxlen         = sizeof(long),
76                 .mode           = 0644,
77                 .proc_handler   = proc_doulongvec_minmax,
78                 .extra1         = &ft_zero,
79                 .extra2         = &ft_int_max,
80         },
81         {
82                 .procname       = "max_queued_events",
83                 .data           = &fanotify_max_queued_events,
84                 .maxlen         = sizeof(int),
85                 .mode           = 0644,
86                 .proc_handler   = proc_dointvec_minmax,
87                 .extra1         = SYSCTL_ZERO
88         },
89         { }
90 };
91
92 static void __init fanotify_sysctls_init(void)
93 {
94         register_sysctl("fs/fanotify", fanotify_table);
95 }
96 #else
97 #define fanotify_sysctls_init() do { } while (0)
98 #endif /* CONFIG_SYSCTL */
99
100 /*
101  * All flags that may be specified in parameter event_f_flags of fanotify_init.
102  *
103  * Internal and external open flags are stored together in field f_flags of
104  * struct file. Only external open flags shall be allowed in event_f_flags.
105  * Internal flags like FMODE_NONOTIFY, FMODE_EXEC, FMODE_NOCMTIME shall be
106  * excluded.
107  */
108 #define FANOTIFY_INIT_ALL_EVENT_F_BITS                          ( \
109                 O_ACCMODE       | O_APPEND      | O_NONBLOCK    | \
110                 __O_SYNC        | O_DSYNC       | O_CLOEXEC     | \
111                 O_LARGEFILE     | O_NOATIME     )
112
113 extern const struct fsnotify_ops fanotify_fsnotify_ops;
114
115 struct kmem_cache *fanotify_mark_cache __read_mostly;
116 struct kmem_cache *fanotify_fid_event_cachep __read_mostly;
117 struct kmem_cache *fanotify_path_event_cachep __read_mostly;
118 struct kmem_cache *fanotify_perm_event_cachep __read_mostly;
119
120 #define FANOTIFY_EVENT_ALIGN 4
121 #define FANOTIFY_FID_INFO_HDR_LEN \
122         (sizeof(struct fanotify_event_info_fid) + sizeof(struct file_handle))
123 #define FANOTIFY_PIDFD_INFO_HDR_LEN \
124         sizeof(struct fanotify_event_info_pidfd)
125 #define FANOTIFY_ERROR_INFO_LEN \
126         (sizeof(struct fanotify_event_info_error))
127
128 static int fanotify_fid_info_len(int fh_len, int name_len)
129 {
130         int info_len = fh_len;
131
132         if (name_len)
133                 info_len += name_len + 1;
134
135         return roundup(FANOTIFY_FID_INFO_HDR_LEN + info_len,
136                        FANOTIFY_EVENT_ALIGN);
137 }
138
139 /* FAN_RENAME may have one or two dir+name info records */
140 static int fanotify_dir_name_info_len(struct fanotify_event *event)
141 {
142         struct fanotify_info *info = fanotify_event_info(event);
143         int dir_fh_len = fanotify_event_dir_fh_len(event);
144         int dir2_fh_len = fanotify_event_dir2_fh_len(event);
145         int info_len = 0;
146
147         if (dir_fh_len)
148                 info_len += fanotify_fid_info_len(dir_fh_len,
149                                                   info->name_len);
150         if (dir2_fh_len)
151                 info_len += fanotify_fid_info_len(dir2_fh_len,
152                                                   info->name2_len);
153
154         return info_len;
155 }
156
157 static size_t fanotify_event_len(unsigned int info_mode,
158                                  struct fanotify_event *event)
159 {
160         size_t event_len = FAN_EVENT_METADATA_LEN;
161         int fh_len;
162         int dot_len = 0;
163
164         if (!info_mode)
165                 return event_len;
166
167         if (fanotify_is_error_event(event->mask))
168                 event_len += FANOTIFY_ERROR_INFO_LEN;
169
170         if (fanotify_event_has_any_dir_fh(event)) {
171                 event_len += fanotify_dir_name_info_len(event);
172         } else if ((info_mode & FAN_REPORT_NAME) &&
173                    (event->mask & FAN_ONDIR)) {
174                 /*
175                  * With group flag FAN_REPORT_NAME, if name was not recorded in
176                  * event on a directory, we will report the name ".".
177                  */
178                 dot_len = 1;
179         }
180
181         if (info_mode & FAN_REPORT_PIDFD)
182                 event_len += FANOTIFY_PIDFD_INFO_HDR_LEN;
183
184         if (fanotify_event_has_object_fh(event)) {
185                 fh_len = fanotify_event_object_fh_len(event);
186                 event_len += fanotify_fid_info_len(fh_len, dot_len);
187         }
188
189         return event_len;
190 }
191
192 /*
193  * Remove an hashed event from merge hash table.
194  */
195 static void fanotify_unhash_event(struct fsnotify_group *group,
196                                   struct fanotify_event *event)
197 {
198         assert_spin_locked(&group->notification_lock);
199
200         pr_debug("%s: group=%p event=%p bucket=%u\n", __func__,
201                  group, event, fanotify_event_hash_bucket(group, event));
202
203         if (WARN_ON_ONCE(hlist_unhashed(&event->merge_list)))
204                 return;
205
206         hlist_del_init(&event->merge_list);
207 }
208
209 /*
210  * Get an fanotify notification event if one exists and is small
211  * enough to fit in "count". Return an error pointer if the count
212  * is not large enough. When permission event is dequeued, its state is
213  * updated accordingly.
214  */
215 static struct fanotify_event *get_one_event(struct fsnotify_group *group,
216                                             size_t count)
217 {
218         size_t event_size;
219         struct fanotify_event *event = NULL;
220         struct fsnotify_event *fsn_event;
221         unsigned int info_mode = FAN_GROUP_FLAG(group, FANOTIFY_INFO_MODES);
222
223         pr_debug("%s: group=%p count=%zd\n", __func__, group, count);
224
225         spin_lock(&group->notification_lock);
226         fsn_event = fsnotify_peek_first_event(group);
227         if (!fsn_event)
228                 goto out;
229
230         event = FANOTIFY_E(fsn_event);
231         event_size = fanotify_event_len(info_mode, event);
232
233         if (event_size > count) {
234                 event = ERR_PTR(-EINVAL);
235                 goto out;
236         }
237
238         /*
239          * Held the notification_lock the whole time, so this is the
240          * same event we peeked above.
241          */
242         fsnotify_remove_first_event(group);
243         if (fanotify_is_perm_event(event->mask))
244                 FANOTIFY_PERM(event)->state = FAN_EVENT_REPORTED;
245         if (fanotify_is_hashed_event(event->mask))
246                 fanotify_unhash_event(group, event);
247 out:
248         spin_unlock(&group->notification_lock);
249         return event;
250 }
251
252 static int create_fd(struct fsnotify_group *group, struct path *path,
253                      struct file **file)
254 {
255         int client_fd;
256         struct file *new_file;
257
258         client_fd = get_unused_fd_flags(group->fanotify_data.f_flags);
259         if (client_fd < 0)
260                 return client_fd;
261
262         /*
263          * we need a new file handle for the userspace program so it can read even if it was
264          * originally opened O_WRONLY.
265          */
266         new_file = dentry_open(path,
267                                group->fanotify_data.f_flags | FMODE_NONOTIFY,
268                                current_cred());
269         if (IS_ERR(new_file)) {
270                 /*
271                  * we still send an event even if we can't open the file.  this
272                  * can happen when say tasks are gone and we try to open their
273                  * /proc files or we try to open a WRONLY file like in sysfs
274                  * we just send the errno to userspace since there isn't much
275                  * else we can do.
276                  */
277                 put_unused_fd(client_fd);
278                 client_fd = PTR_ERR(new_file);
279         } else {
280                 *file = new_file;
281         }
282
283         return client_fd;
284 }
285
286 /*
287  * Finish processing of permission event by setting it to ANSWERED state and
288  * drop group->notification_lock.
289  */
290 static void finish_permission_event(struct fsnotify_group *group,
291                                     struct fanotify_perm_event *event,
292                                     unsigned int response)
293                                     __releases(&group->notification_lock)
294 {
295         bool destroy = false;
296
297         assert_spin_locked(&group->notification_lock);
298         event->response = response;
299         if (event->state == FAN_EVENT_CANCELED)
300                 destroy = true;
301         else
302                 event->state = FAN_EVENT_ANSWERED;
303         spin_unlock(&group->notification_lock);
304         if (destroy)
305                 fsnotify_destroy_event(group, &event->fae.fse);
306 }
307
308 static int process_access_response(struct fsnotify_group *group,
309                                    struct fanotify_response *response_struct)
310 {
311         struct fanotify_perm_event *event;
312         int fd = response_struct->fd;
313         int response = response_struct->response;
314
315         pr_debug("%s: group=%p fd=%d response=%d\n", __func__, group,
316                  fd, response);
317         /*
318          * make sure the response is valid, if invalid we do nothing and either
319          * userspace can send a valid response or we will clean it up after the
320          * timeout
321          */
322         switch (response & ~FAN_AUDIT) {
323         case FAN_ALLOW:
324         case FAN_DENY:
325                 break;
326         default:
327                 return -EINVAL;
328         }
329
330         if (fd < 0)
331                 return -EINVAL;
332
333         if ((response & FAN_AUDIT) && !FAN_GROUP_FLAG(group, FAN_ENABLE_AUDIT))
334                 return -EINVAL;
335
336         spin_lock(&group->notification_lock);
337         list_for_each_entry(event, &group->fanotify_data.access_list,
338                             fae.fse.list) {
339                 if (event->fd != fd)
340                         continue;
341
342                 list_del_init(&event->fae.fse.list);
343                 finish_permission_event(group, event, response);
344                 wake_up(&group->fanotify_data.access_waitq);
345                 return 0;
346         }
347         spin_unlock(&group->notification_lock);
348
349         return -ENOENT;
350 }
351
352 static size_t copy_error_info_to_user(struct fanotify_event *event,
353                                       char __user *buf, int count)
354 {
355         struct fanotify_event_info_error info = { };
356         struct fanotify_error_event *fee = FANOTIFY_EE(event);
357
358         info.hdr.info_type = FAN_EVENT_INFO_TYPE_ERROR;
359         info.hdr.len = FANOTIFY_ERROR_INFO_LEN;
360
361         if (WARN_ON(count < info.hdr.len))
362                 return -EFAULT;
363
364         info.error = fee->error;
365         info.error_count = fee->err_count;
366
367         if (copy_to_user(buf, &info, sizeof(info)))
368                 return -EFAULT;
369
370         return info.hdr.len;
371 }
372
373 static int copy_fid_info_to_user(__kernel_fsid_t *fsid, struct fanotify_fh *fh,
374                                  int info_type, const char *name,
375                                  size_t name_len,
376                                  char __user *buf, size_t count)
377 {
378         struct fanotify_event_info_fid info = { };
379         struct file_handle handle = { };
380         unsigned char bounce[FANOTIFY_INLINE_FH_LEN], *fh_buf;
381         size_t fh_len = fh ? fh->len : 0;
382         size_t info_len = fanotify_fid_info_len(fh_len, name_len);
383         size_t len = info_len;
384
385         pr_debug("%s: fh_len=%zu name_len=%zu, info_len=%zu, count=%zu\n",
386                  __func__, fh_len, name_len, info_len, count);
387
388         if (WARN_ON_ONCE(len < sizeof(info) || len > count))
389                 return -EFAULT;
390
391         /*
392          * Copy event info fid header followed by variable sized file handle
393          * and optionally followed by variable sized filename.
394          */
395         switch (info_type) {
396         case FAN_EVENT_INFO_TYPE_FID:
397         case FAN_EVENT_INFO_TYPE_DFID:
398                 if (WARN_ON_ONCE(name_len))
399                         return -EFAULT;
400                 break;
401         case FAN_EVENT_INFO_TYPE_DFID_NAME:
402         case FAN_EVENT_INFO_TYPE_OLD_DFID_NAME:
403         case FAN_EVENT_INFO_TYPE_NEW_DFID_NAME:
404                 if (WARN_ON_ONCE(!name || !name_len))
405                         return -EFAULT;
406                 break;
407         default:
408                 return -EFAULT;
409         }
410
411         info.hdr.info_type = info_type;
412         info.hdr.len = len;
413         info.fsid = *fsid;
414         if (copy_to_user(buf, &info, sizeof(info)))
415                 return -EFAULT;
416
417         buf += sizeof(info);
418         len -= sizeof(info);
419         if (WARN_ON_ONCE(len < sizeof(handle)))
420                 return -EFAULT;
421
422         handle.handle_type = fh->type;
423         handle.handle_bytes = fh_len;
424
425         /* Mangle handle_type for bad file_handle */
426         if (!fh_len)
427                 handle.handle_type = FILEID_INVALID;
428
429         if (copy_to_user(buf, &handle, sizeof(handle)))
430                 return -EFAULT;
431
432         buf += sizeof(handle);
433         len -= sizeof(handle);
434         if (WARN_ON_ONCE(len < fh_len))
435                 return -EFAULT;
436
437         /*
438          * For an inline fh and inline file name, copy through stack to exclude
439          * the copy from usercopy hardening protections.
440          */
441         fh_buf = fanotify_fh_buf(fh);
442         if (fh_len <= FANOTIFY_INLINE_FH_LEN) {
443                 memcpy(bounce, fh_buf, fh_len);
444                 fh_buf = bounce;
445         }
446         if (copy_to_user(buf, fh_buf, fh_len))
447                 return -EFAULT;
448
449         buf += fh_len;
450         len -= fh_len;
451
452         if (name_len) {
453                 /* Copy the filename with terminating null */
454                 name_len++;
455                 if (WARN_ON_ONCE(len < name_len))
456                         return -EFAULT;
457
458                 if (copy_to_user(buf, name, name_len))
459                         return -EFAULT;
460
461                 buf += name_len;
462                 len -= name_len;
463         }
464
465         /* Pad with 0's */
466         WARN_ON_ONCE(len < 0 || len >= FANOTIFY_EVENT_ALIGN);
467         if (len > 0 && clear_user(buf, len))
468                 return -EFAULT;
469
470         return info_len;
471 }
472
473 static int copy_pidfd_info_to_user(int pidfd,
474                                    char __user *buf,
475                                    size_t count)
476 {
477         struct fanotify_event_info_pidfd info = { };
478         size_t info_len = FANOTIFY_PIDFD_INFO_HDR_LEN;
479
480         if (WARN_ON_ONCE(info_len > count))
481                 return -EFAULT;
482
483         info.hdr.info_type = FAN_EVENT_INFO_TYPE_PIDFD;
484         info.hdr.len = info_len;
485         info.pidfd = pidfd;
486
487         if (copy_to_user(buf, &info, info_len))
488                 return -EFAULT;
489
490         return info_len;
491 }
492
493 static int copy_info_records_to_user(struct fanotify_event *event,
494                                      struct fanotify_info *info,
495                                      unsigned int info_mode, int pidfd,
496                                      char __user *buf, size_t count)
497 {
498         int ret, total_bytes = 0, info_type = 0;
499         unsigned int fid_mode = info_mode & FANOTIFY_FID_BITS;
500         unsigned int pidfd_mode = info_mode & FAN_REPORT_PIDFD;
501
502         /*
503          * Event info records order is as follows:
504          * 1. dir fid + name
505          * 2. (optional) new dir fid + new name
506          * 3. (optional) child fid
507          */
508         if (fanotify_event_has_dir_fh(event)) {
509                 info_type = info->name_len ? FAN_EVENT_INFO_TYPE_DFID_NAME :
510                                              FAN_EVENT_INFO_TYPE_DFID;
511
512                 /* FAN_RENAME uses special info types */
513                 if (event->mask & FAN_RENAME)
514                         info_type = FAN_EVENT_INFO_TYPE_OLD_DFID_NAME;
515
516                 ret = copy_fid_info_to_user(fanotify_event_fsid(event),
517                                             fanotify_info_dir_fh(info),
518                                             info_type,
519                                             fanotify_info_name(info),
520                                             info->name_len, buf, count);
521                 if (ret < 0)
522                         return ret;
523
524                 buf += ret;
525                 count -= ret;
526                 total_bytes += ret;
527         }
528
529         /* New dir fid+name may be reported in addition to old dir fid+name */
530         if (fanotify_event_has_dir2_fh(event)) {
531                 info_type = FAN_EVENT_INFO_TYPE_NEW_DFID_NAME;
532                 ret = copy_fid_info_to_user(fanotify_event_fsid(event),
533                                             fanotify_info_dir2_fh(info),
534                                             info_type,
535                                             fanotify_info_name2(info),
536                                             info->name2_len, buf, count);
537                 if (ret < 0)
538                         return ret;
539
540                 buf += ret;
541                 count -= ret;
542                 total_bytes += ret;
543         }
544
545         if (fanotify_event_has_object_fh(event)) {
546                 const char *dot = NULL;
547                 int dot_len = 0;
548
549                 if (fid_mode == FAN_REPORT_FID || info_type) {
550                         /*
551                          * With only group flag FAN_REPORT_FID only type FID is
552                          * reported. Second info record type is always FID.
553                          */
554                         info_type = FAN_EVENT_INFO_TYPE_FID;
555                 } else if ((fid_mode & FAN_REPORT_NAME) &&
556                            (event->mask & FAN_ONDIR)) {
557                         /*
558                          * With group flag FAN_REPORT_NAME, if name was not
559                          * recorded in an event on a directory, report the name
560                          * "." with info type DFID_NAME.
561                          */
562                         info_type = FAN_EVENT_INFO_TYPE_DFID_NAME;
563                         dot = ".";
564                         dot_len = 1;
565                 } else if ((event->mask & ALL_FSNOTIFY_DIRENT_EVENTS) ||
566                            (event->mask & FAN_ONDIR)) {
567                         /*
568                          * With group flag FAN_REPORT_DIR_FID, a single info
569                          * record has type DFID for directory entry modification
570                          * event and for event on a directory.
571                          */
572                         info_type = FAN_EVENT_INFO_TYPE_DFID;
573                 } else {
574                         /*
575                          * With group flags FAN_REPORT_DIR_FID|FAN_REPORT_FID,
576                          * a single info record has type FID for event on a
577                          * non-directory, when there is no directory to report.
578                          * For example, on FAN_DELETE_SELF event.
579                          */
580                         info_type = FAN_EVENT_INFO_TYPE_FID;
581                 }
582
583                 ret = copy_fid_info_to_user(fanotify_event_fsid(event),
584                                             fanotify_event_object_fh(event),
585                                             info_type, dot, dot_len,
586                                             buf, count);
587                 if (ret < 0)
588                         return ret;
589
590                 buf += ret;
591                 count -= ret;
592                 total_bytes += ret;
593         }
594
595         if (pidfd_mode) {
596                 ret = copy_pidfd_info_to_user(pidfd, buf, count);
597                 if (ret < 0)
598                         return ret;
599
600                 buf += ret;
601                 count -= ret;
602                 total_bytes += ret;
603         }
604
605         if (fanotify_is_error_event(event->mask)) {
606                 ret = copy_error_info_to_user(event, buf, count);
607                 if (ret < 0)
608                         return ret;
609                 buf += ret;
610                 count -= ret;
611                 total_bytes += ret;
612         }
613
614         return total_bytes;
615 }
616
617 static ssize_t copy_event_to_user(struct fsnotify_group *group,
618                                   struct fanotify_event *event,
619                                   char __user *buf, size_t count)
620 {
621         struct fanotify_event_metadata metadata;
622         struct path *path = fanotify_event_path(event);
623         struct fanotify_info *info = fanotify_event_info(event);
624         unsigned int info_mode = FAN_GROUP_FLAG(group, FANOTIFY_INFO_MODES);
625         unsigned int pidfd_mode = info_mode & FAN_REPORT_PIDFD;
626         struct file *f = NULL;
627         int ret, pidfd = FAN_NOPIDFD, fd = FAN_NOFD;
628
629         pr_debug("%s: group=%p event=%p\n", __func__, group, event);
630
631         metadata.event_len = fanotify_event_len(info_mode, event);
632         metadata.metadata_len = FAN_EVENT_METADATA_LEN;
633         metadata.vers = FANOTIFY_METADATA_VERSION;
634         metadata.reserved = 0;
635         metadata.mask = event->mask & FANOTIFY_OUTGOING_EVENTS;
636         metadata.pid = pid_vnr(event->pid);
637         /*
638          * For an unprivileged listener, event->pid can be used to identify the
639          * events generated by the listener process itself, without disclosing
640          * the pids of other processes.
641          */
642         if (FAN_GROUP_FLAG(group, FANOTIFY_UNPRIV) &&
643             task_tgid(current) != event->pid)
644                 metadata.pid = 0;
645
646         /*
647          * For now, fid mode is required for an unprivileged listener and
648          * fid mode does not report fd in events.  Keep this check anyway
649          * for safety in case fid mode requirement is relaxed in the future
650          * to allow unprivileged listener to get events with no fd and no fid.
651          */
652         if (!FAN_GROUP_FLAG(group, FANOTIFY_UNPRIV) &&
653             path && path->mnt && path->dentry) {
654                 fd = create_fd(group, path, &f);
655                 if (fd < 0)
656                         return fd;
657         }
658         metadata.fd = fd;
659
660         if (pidfd_mode) {
661                 /*
662                  * Complain if the FAN_REPORT_PIDFD and FAN_REPORT_TID mutual
663                  * exclusion is ever lifted. At the time of incoporating pidfd
664                  * support within fanotify, the pidfd API only supported the
665                  * creation of pidfds for thread-group leaders.
666                  */
667                 WARN_ON_ONCE(FAN_GROUP_FLAG(group, FAN_REPORT_TID));
668
669                 /*
670                  * The PIDTYPE_TGID check for an event->pid is performed
671                  * preemptively in an attempt to catch out cases where the event
672                  * listener reads events after the event generating process has
673                  * already terminated. Report FAN_NOPIDFD to the event listener
674                  * in those cases, with all other pidfd creation errors being
675                  * reported as FAN_EPIDFD.
676                  */
677                 if (metadata.pid == 0 ||
678                     !pid_has_task(event->pid, PIDTYPE_TGID)) {
679                         pidfd = FAN_NOPIDFD;
680                 } else {
681                         pidfd = pidfd_create(event->pid, 0);
682                         if (pidfd < 0)
683                                 pidfd = FAN_EPIDFD;
684                 }
685         }
686
687         ret = -EFAULT;
688         /*
689          * Sanity check copy size in case get_one_event() and
690          * event_len sizes ever get out of sync.
691          */
692         if (WARN_ON_ONCE(metadata.event_len > count))
693                 goto out_close_fd;
694
695         if (copy_to_user(buf, &metadata, FAN_EVENT_METADATA_LEN))
696                 goto out_close_fd;
697
698         buf += FAN_EVENT_METADATA_LEN;
699         count -= FAN_EVENT_METADATA_LEN;
700
701         if (fanotify_is_perm_event(event->mask))
702                 FANOTIFY_PERM(event)->fd = fd;
703
704         if (info_mode) {
705                 ret = copy_info_records_to_user(event, info, info_mode, pidfd,
706                                                 buf, count);
707                 if (ret < 0)
708                         goto out_close_fd;
709         }
710
711         if (f)
712                 fd_install(fd, f);
713
714         return metadata.event_len;
715
716 out_close_fd:
717         if (fd != FAN_NOFD) {
718                 put_unused_fd(fd);
719                 fput(f);
720         }
721
722         if (pidfd >= 0)
723                 close_fd(pidfd);
724
725         return ret;
726 }
727
728 /* intofiy userspace file descriptor functions */
729 static __poll_t fanotify_poll(struct file *file, poll_table *wait)
730 {
731         struct fsnotify_group *group = file->private_data;
732         __poll_t ret = 0;
733
734         poll_wait(file, &group->notification_waitq, wait);
735         spin_lock(&group->notification_lock);
736         if (!fsnotify_notify_queue_is_empty(group))
737                 ret = EPOLLIN | EPOLLRDNORM;
738         spin_unlock(&group->notification_lock);
739
740         return ret;
741 }
742
743 static ssize_t fanotify_read(struct file *file, char __user *buf,
744                              size_t count, loff_t *pos)
745 {
746         struct fsnotify_group *group;
747         struct fanotify_event *event;
748         char __user *start;
749         int ret;
750         DEFINE_WAIT_FUNC(wait, woken_wake_function);
751
752         start = buf;
753         group = file->private_data;
754
755         pr_debug("%s: group=%p\n", __func__, group);
756
757         add_wait_queue(&group->notification_waitq, &wait);
758         while (1) {
759                 /*
760                  * User can supply arbitrarily large buffer. Avoid softlockups
761                  * in case there are lots of available events.
762                  */
763                 cond_resched();
764                 event = get_one_event(group, count);
765                 if (IS_ERR(event)) {
766                         ret = PTR_ERR(event);
767                         break;
768                 }
769
770                 if (!event) {
771                         ret = -EAGAIN;
772                         if (file->f_flags & O_NONBLOCK)
773                                 break;
774
775                         ret = -ERESTARTSYS;
776                         if (signal_pending(current))
777                                 break;
778
779                         if (start != buf)
780                                 break;
781
782                         wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
783                         continue;
784                 }
785
786                 ret = copy_event_to_user(group, event, buf, count);
787                 if (unlikely(ret == -EOPENSTALE)) {
788                         /*
789                          * We cannot report events with stale fd so drop it.
790                          * Setting ret to 0 will continue the event loop and
791                          * do the right thing if there are no more events to
792                          * read (i.e. return bytes read, -EAGAIN or wait).
793                          */
794                         ret = 0;
795                 }
796
797                 /*
798                  * Permission events get queued to wait for response.  Other
799                  * events can be destroyed now.
800                  */
801                 if (!fanotify_is_perm_event(event->mask)) {
802                         fsnotify_destroy_event(group, &event->fse);
803                 } else {
804                         if (ret <= 0) {
805                                 spin_lock(&group->notification_lock);
806                                 finish_permission_event(group,
807                                         FANOTIFY_PERM(event), FAN_DENY);
808                                 wake_up(&group->fanotify_data.access_waitq);
809                         } else {
810                                 spin_lock(&group->notification_lock);
811                                 list_add_tail(&event->fse.list,
812                                         &group->fanotify_data.access_list);
813                                 spin_unlock(&group->notification_lock);
814                         }
815                 }
816                 if (ret < 0)
817                         break;
818                 buf += ret;
819                 count -= ret;
820         }
821         remove_wait_queue(&group->notification_waitq, &wait);
822
823         if (start != buf && ret != -EFAULT)
824                 ret = buf - start;
825         return ret;
826 }
827
828 static ssize_t fanotify_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
829 {
830         struct fanotify_response response = { .fd = -1, .response = -1 };
831         struct fsnotify_group *group;
832         int ret;
833
834         if (!IS_ENABLED(CONFIG_FANOTIFY_ACCESS_PERMISSIONS))
835                 return -EINVAL;
836
837         group = file->private_data;
838
839         if (count < sizeof(response))
840                 return -EINVAL;
841
842         count = sizeof(response);
843
844         pr_debug("%s: group=%p count=%zu\n", __func__, group, count);
845
846         if (copy_from_user(&response, buf, count))
847                 return -EFAULT;
848
849         ret = process_access_response(group, &response);
850         if (ret < 0)
851                 count = ret;
852
853         return count;
854 }
855
856 static int fanotify_release(struct inode *ignored, struct file *file)
857 {
858         struct fsnotify_group *group = file->private_data;
859         struct fsnotify_event *fsn_event;
860
861         /*
862          * Stop new events from arriving in the notification queue. since
863          * userspace cannot use fanotify fd anymore, no event can enter or
864          * leave access_list by now either.
865          */
866         fsnotify_group_stop_queueing(group);
867
868         /*
869          * Process all permission events on access_list and notification queue
870          * and simulate reply from userspace.
871          */
872         spin_lock(&group->notification_lock);
873         while (!list_empty(&group->fanotify_data.access_list)) {
874                 struct fanotify_perm_event *event;
875
876                 event = list_first_entry(&group->fanotify_data.access_list,
877                                 struct fanotify_perm_event, fae.fse.list);
878                 list_del_init(&event->fae.fse.list);
879                 finish_permission_event(group, event, FAN_ALLOW);
880                 spin_lock(&group->notification_lock);
881         }
882
883         /*
884          * Destroy all non-permission events. For permission events just
885          * dequeue them and set the response. They will be freed once the
886          * response is consumed and fanotify_get_response() returns.
887          */
888         while ((fsn_event = fsnotify_remove_first_event(group))) {
889                 struct fanotify_event *event = FANOTIFY_E(fsn_event);
890
891                 if (!(event->mask & FANOTIFY_PERM_EVENTS)) {
892                         spin_unlock(&group->notification_lock);
893                         fsnotify_destroy_event(group, fsn_event);
894                 } else {
895                         finish_permission_event(group, FANOTIFY_PERM(event),
896                                                 FAN_ALLOW);
897                 }
898                 spin_lock(&group->notification_lock);
899         }
900         spin_unlock(&group->notification_lock);
901
902         /* Response for all permission events it set, wakeup waiters */
903         wake_up(&group->fanotify_data.access_waitq);
904
905         /* matches the fanotify_init->fsnotify_alloc_group */
906         fsnotify_destroy_group(group);
907
908         return 0;
909 }
910
911 static long fanotify_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
912 {
913         struct fsnotify_group *group;
914         struct fsnotify_event *fsn_event;
915         void __user *p;
916         int ret = -ENOTTY;
917         size_t send_len = 0;
918
919         group = file->private_data;
920
921         p = (void __user *) arg;
922
923         switch (cmd) {
924         case FIONREAD:
925                 spin_lock(&group->notification_lock);
926                 list_for_each_entry(fsn_event, &group->notification_list, list)
927                         send_len += FAN_EVENT_METADATA_LEN;
928                 spin_unlock(&group->notification_lock);
929                 ret = put_user(send_len, (int __user *) p);
930                 break;
931         }
932
933         return ret;
934 }
935
936 static const struct file_operations fanotify_fops = {
937         .show_fdinfo    = fanotify_show_fdinfo,
938         .poll           = fanotify_poll,
939         .read           = fanotify_read,
940         .write          = fanotify_write,
941         .fasync         = NULL,
942         .release        = fanotify_release,
943         .unlocked_ioctl = fanotify_ioctl,
944         .compat_ioctl   = compat_ptr_ioctl,
945         .llseek         = noop_llseek,
946 };
947
948 static int fanotify_find_path(int dfd, const char __user *filename,
949                               struct path *path, unsigned int flags, __u64 mask,
950                               unsigned int obj_type)
951 {
952         int ret;
953
954         pr_debug("%s: dfd=%d filename=%p flags=%x\n", __func__,
955                  dfd, filename, flags);
956
957         if (filename == NULL) {
958                 struct fd f = fdget(dfd);
959
960                 ret = -EBADF;
961                 if (!f.file)
962                         goto out;
963
964                 ret = -ENOTDIR;
965                 if ((flags & FAN_MARK_ONLYDIR) &&
966                     !(S_ISDIR(file_inode(f.file)->i_mode))) {
967                         fdput(f);
968                         goto out;
969                 }
970
971                 *path = f.file->f_path;
972                 path_get(path);
973                 fdput(f);
974         } else {
975                 unsigned int lookup_flags = 0;
976
977                 if (!(flags & FAN_MARK_DONT_FOLLOW))
978                         lookup_flags |= LOOKUP_FOLLOW;
979                 if (flags & FAN_MARK_ONLYDIR)
980                         lookup_flags |= LOOKUP_DIRECTORY;
981
982                 ret = user_path_at(dfd, filename, lookup_flags, path);
983                 if (ret)
984                         goto out;
985         }
986
987         /* you can only watch an inode if you have read permissions on it */
988         ret = path_permission(path, MAY_READ);
989         if (ret) {
990                 path_put(path);
991                 goto out;
992         }
993
994         ret = security_path_notify(path, mask, obj_type);
995         if (ret)
996                 path_put(path);
997
998 out:
999         return ret;
1000 }
1001
1002 static __u32 fanotify_mark_remove_from_mask(struct fsnotify_mark *fsn_mark,
1003                                             __u32 mask, unsigned int flags,
1004                                             __u32 umask, int *destroy)
1005 {
1006         __u32 oldmask = 0;
1007
1008         /* umask bits cannot be removed by user */
1009         mask &= ~umask;
1010         spin_lock(&fsn_mark->lock);
1011         if (!(flags & FAN_MARK_IGNORED_MASK)) {
1012                 oldmask = fsn_mark->mask;
1013                 fsn_mark->mask &= ~mask;
1014         } else {
1015                 fsn_mark->ignored_mask &= ~mask;
1016         }
1017         /*
1018          * We need to keep the mark around even if remaining mask cannot
1019          * result in any events (e.g. mask == FAN_ONDIR) to support incremenal
1020          * changes to the mask.
1021          * Destroy mark when only umask bits remain.
1022          */
1023         *destroy = !((fsn_mark->mask | fsn_mark->ignored_mask) & ~umask);
1024         spin_unlock(&fsn_mark->lock);
1025
1026         return mask & oldmask;
1027 }
1028
1029 static int fanotify_remove_mark(struct fsnotify_group *group,
1030                                 fsnotify_connp_t *connp, __u32 mask,
1031                                 unsigned int flags, __u32 umask)
1032 {
1033         struct fsnotify_mark *fsn_mark = NULL;
1034         __u32 removed;
1035         int destroy_mark;
1036
1037         mutex_lock(&group->mark_mutex);
1038         fsn_mark = fsnotify_find_mark(connp, group);
1039         if (!fsn_mark) {
1040                 mutex_unlock(&group->mark_mutex);
1041                 return -ENOENT;
1042         }
1043
1044         removed = fanotify_mark_remove_from_mask(fsn_mark, mask, flags,
1045                                                  umask, &destroy_mark);
1046         if (removed & fsnotify_conn_mask(fsn_mark->connector))
1047                 fsnotify_recalc_mask(fsn_mark->connector);
1048         if (destroy_mark)
1049                 fsnotify_detach_mark(fsn_mark);
1050         mutex_unlock(&group->mark_mutex);
1051         if (destroy_mark)
1052                 fsnotify_free_mark(fsn_mark);
1053
1054         /* matches the fsnotify_find_mark() */
1055         fsnotify_put_mark(fsn_mark);
1056         return 0;
1057 }
1058
1059 static int fanotify_remove_vfsmount_mark(struct fsnotify_group *group,
1060                                          struct vfsmount *mnt, __u32 mask,
1061                                          unsigned int flags, __u32 umask)
1062 {
1063         return fanotify_remove_mark(group, &real_mount(mnt)->mnt_fsnotify_marks,
1064                                     mask, flags, umask);
1065 }
1066
1067 static int fanotify_remove_sb_mark(struct fsnotify_group *group,
1068                                    struct super_block *sb, __u32 mask,
1069                                    unsigned int flags, __u32 umask)
1070 {
1071         return fanotify_remove_mark(group, &sb->s_fsnotify_marks, mask,
1072                                     flags, umask);
1073 }
1074
1075 static int fanotify_remove_inode_mark(struct fsnotify_group *group,
1076                                       struct inode *inode, __u32 mask,
1077                                       unsigned int flags, __u32 umask)
1078 {
1079         return fanotify_remove_mark(group, &inode->i_fsnotify_marks, mask,
1080                                     flags, umask);
1081 }
1082
1083 static __u32 fanotify_mark_add_to_mask(struct fsnotify_mark *fsn_mark,
1084                                        __u32 mask,
1085                                        unsigned int flags)
1086 {
1087         __u32 oldmask = -1;
1088
1089         spin_lock(&fsn_mark->lock);
1090         if (!(flags & FAN_MARK_IGNORED_MASK)) {
1091                 oldmask = fsn_mark->mask;
1092                 fsn_mark->mask |= mask;
1093         } else {
1094                 fsn_mark->ignored_mask |= mask;
1095                 if (flags & FAN_MARK_IGNORED_SURV_MODIFY)
1096                         fsn_mark->flags |= FSNOTIFY_MARK_FLAG_IGNORED_SURV_MODIFY;
1097         }
1098         spin_unlock(&fsn_mark->lock);
1099
1100         return mask & ~oldmask;
1101 }
1102
1103 static struct fsnotify_mark *fanotify_add_new_mark(struct fsnotify_group *group,
1104                                                    fsnotify_connp_t *connp,
1105                                                    unsigned int obj_type,
1106                                                    __kernel_fsid_t *fsid)
1107 {
1108         struct ucounts *ucounts = group->fanotify_data.ucounts;
1109         struct fsnotify_mark *mark;
1110         int ret;
1111
1112         /*
1113          * Enforce per user marks limits per user in all containing user ns.
1114          * A group with FAN_UNLIMITED_MARKS does not contribute to mark count
1115          * in the limited groups account.
1116          */
1117         if (!FAN_GROUP_FLAG(group, FAN_UNLIMITED_MARKS) &&
1118             !inc_ucount(ucounts->ns, ucounts->uid, UCOUNT_FANOTIFY_MARKS))
1119                 return ERR_PTR(-ENOSPC);
1120
1121         mark = kmem_cache_alloc(fanotify_mark_cache, GFP_KERNEL);
1122         if (!mark) {
1123                 ret = -ENOMEM;
1124                 goto out_dec_ucounts;
1125         }
1126
1127         fsnotify_init_mark(mark, group);
1128         ret = fsnotify_add_mark_locked(mark, connp, obj_type, 0, fsid);
1129         if (ret) {
1130                 fsnotify_put_mark(mark);
1131                 goto out_dec_ucounts;
1132         }
1133
1134         return mark;
1135
1136 out_dec_ucounts:
1137         if (!FAN_GROUP_FLAG(group, FAN_UNLIMITED_MARKS))
1138                 dec_ucount(ucounts, UCOUNT_FANOTIFY_MARKS);
1139         return ERR_PTR(ret);
1140 }
1141
1142 static int fanotify_group_init_error_pool(struct fsnotify_group *group)
1143 {
1144         if (mempool_initialized(&group->fanotify_data.error_events_pool))
1145                 return 0;
1146
1147         return mempool_init_kmalloc_pool(&group->fanotify_data.error_events_pool,
1148                                          FANOTIFY_DEFAULT_FEE_POOL_SIZE,
1149                                          sizeof(struct fanotify_error_event));
1150 }
1151
1152 static int fanotify_add_mark(struct fsnotify_group *group,
1153                              fsnotify_connp_t *connp, unsigned int obj_type,
1154                              __u32 mask, unsigned int flags,
1155                              __kernel_fsid_t *fsid)
1156 {
1157         struct fsnotify_mark *fsn_mark;
1158         __u32 added;
1159         int ret = 0;
1160
1161         mutex_lock(&group->mark_mutex);
1162         fsn_mark = fsnotify_find_mark(connp, group);
1163         if (!fsn_mark) {
1164                 fsn_mark = fanotify_add_new_mark(group, connp, obj_type, fsid);
1165                 if (IS_ERR(fsn_mark)) {
1166                         mutex_unlock(&group->mark_mutex);
1167                         return PTR_ERR(fsn_mark);
1168                 }
1169         }
1170
1171         /*
1172          * Error events are pre-allocated per group, only if strictly
1173          * needed (i.e. FAN_FS_ERROR was requested).
1174          */
1175         if (!(flags & FAN_MARK_IGNORED_MASK) && (mask & FAN_FS_ERROR)) {
1176                 ret = fanotify_group_init_error_pool(group);
1177                 if (ret)
1178                         goto out;
1179         }
1180
1181         added = fanotify_mark_add_to_mask(fsn_mark, mask, flags);
1182         if (added & ~fsnotify_conn_mask(fsn_mark->connector))
1183                 fsnotify_recalc_mask(fsn_mark->connector);
1184
1185 out:
1186         mutex_unlock(&group->mark_mutex);
1187
1188         fsnotify_put_mark(fsn_mark);
1189         return ret;
1190 }
1191
1192 static int fanotify_add_vfsmount_mark(struct fsnotify_group *group,
1193                                       struct vfsmount *mnt, __u32 mask,
1194                                       unsigned int flags, __kernel_fsid_t *fsid)
1195 {
1196         return fanotify_add_mark(group, &real_mount(mnt)->mnt_fsnotify_marks,
1197                                  FSNOTIFY_OBJ_TYPE_VFSMOUNT, mask, flags, fsid);
1198 }
1199
1200 static int fanotify_add_sb_mark(struct fsnotify_group *group,
1201                                 struct super_block *sb, __u32 mask,
1202                                 unsigned int flags, __kernel_fsid_t *fsid)
1203 {
1204         return fanotify_add_mark(group, &sb->s_fsnotify_marks,
1205                                  FSNOTIFY_OBJ_TYPE_SB, mask, flags, fsid);
1206 }
1207
1208 static int fanotify_add_inode_mark(struct fsnotify_group *group,
1209                                    struct inode *inode, __u32 mask,
1210                                    unsigned int flags, __kernel_fsid_t *fsid)
1211 {
1212         pr_debug("%s: group=%p inode=%p\n", __func__, group, inode);
1213
1214         /*
1215          * If some other task has this inode open for write we should not add
1216          * an ignored mark, unless that ignored mark is supposed to survive
1217          * modification changes anyway.
1218          */
1219         if ((flags & FAN_MARK_IGNORED_MASK) &&
1220             !(flags & FAN_MARK_IGNORED_SURV_MODIFY) &&
1221             inode_is_open_for_write(inode))
1222                 return 0;
1223
1224         return fanotify_add_mark(group, &inode->i_fsnotify_marks,
1225                                  FSNOTIFY_OBJ_TYPE_INODE, mask, flags, fsid);
1226 }
1227
1228 static struct fsnotify_event *fanotify_alloc_overflow_event(void)
1229 {
1230         struct fanotify_event *oevent;
1231
1232         oevent = kmalloc(sizeof(*oevent), GFP_KERNEL_ACCOUNT);
1233         if (!oevent)
1234                 return NULL;
1235
1236         fanotify_init_event(oevent, 0, FS_Q_OVERFLOW);
1237         oevent->type = FANOTIFY_EVENT_TYPE_OVERFLOW;
1238
1239         return &oevent->fse;
1240 }
1241
1242 static struct hlist_head *fanotify_alloc_merge_hash(void)
1243 {
1244         struct hlist_head *hash;
1245
1246         hash = kmalloc(sizeof(struct hlist_head) << FANOTIFY_HTABLE_BITS,
1247                        GFP_KERNEL_ACCOUNT);
1248         if (!hash)
1249                 return NULL;
1250
1251         __hash_init(hash, FANOTIFY_HTABLE_SIZE);
1252
1253         return hash;
1254 }
1255
1256 /* fanotify syscalls */
1257 SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
1258 {
1259         struct fsnotify_group *group;
1260         int f_flags, fd;
1261         unsigned int fid_mode = flags & FANOTIFY_FID_BITS;
1262         unsigned int class = flags & FANOTIFY_CLASS_BITS;
1263         unsigned int internal_flags = 0;
1264
1265         pr_debug("%s: flags=%x event_f_flags=%x\n",
1266                  __func__, flags, event_f_flags);
1267
1268         if (!capable(CAP_SYS_ADMIN)) {
1269                 /*
1270                  * An unprivileged user can setup an fanotify group with
1271                  * limited functionality - an unprivileged group is limited to
1272                  * notification events with file handles and it cannot use
1273                  * unlimited queue/marks.
1274                  */
1275                 if ((flags & FANOTIFY_ADMIN_INIT_FLAGS) || !fid_mode)
1276                         return -EPERM;
1277
1278                 /*
1279                  * Setting the internal flag FANOTIFY_UNPRIV on the group
1280                  * prevents setting mount/filesystem marks on this group and
1281                  * prevents reporting pid and open fd in events.
1282                  */
1283                 internal_flags |= FANOTIFY_UNPRIV;
1284         }
1285
1286 #ifdef CONFIG_AUDITSYSCALL
1287         if (flags & ~(FANOTIFY_INIT_FLAGS | FAN_ENABLE_AUDIT))
1288 #else
1289         if (flags & ~FANOTIFY_INIT_FLAGS)
1290 #endif
1291                 return -EINVAL;
1292
1293         /*
1294          * A pidfd can only be returned for a thread-group leader; thus
1295          * FAN_REPORT_PIDFD and FAN_REPORT_TID need to remain mutually
1296          * exclusive.
1297          */
1298         if ((flags & FAN_REPORT_PIDFD) && (flags & FAN_REPORT_TID))
1299                 return -EINVAL;
1300
1301         if (event_f_flags & ~FANOTIFY_INIT_ALL_EVENT_F_BITS)
1302                 return -EINVAL;
1303
1304         switch (event_f_flags & O_ACCMODE) {
1305         case O_RDONLY:
1306         case O_RDWR:
1307         case O_WRONLY:
1308                 break;
1309         default:
1310                 return -EINVAL;
1311         }
1312
1313         if (fid_mode && class != FAN_CLASS_NOTIF)
1314                 return -EINVAL;
1315
1316         /*
1317          * Child name is reported with parent fid so requires dir fid.
1318          * We can report both child fid and dir fid with or without name.
1319          */
1320         if ((fid_mode & FAN_REPORT_NAME) && !(fid_mode & FAN_REPORT_DIR_FID))
1321                 return -EINVAL;
1322
1323         /*
1324          * FAN_REPORT_TARGET_FID requires FAN_REPORT_NAME and FAN_REPORT_FID
1325          * and is used as an indication to report both dir and child fid on all
1326          * dirent events.
1327          */
1328         if ((fid_mode & FAN_REPORT_TARGET_FID) &&
1329             (!(fid_mode & FAN_REPORT_NAME) || !(fid_mode & FAN_REPORT_FID)))
1330                 return -EINVAL;
1331
1332         f_flags = O_RDWR | FMODE_NONOTIFY;
1333         if (flags & FAN_CLOEXEC)
1334                 f_flags |= O_CLOEXEC;
1335         if (flags & FAN_NONBLOCK)
1336                 f_flags |= O_NONBLOCK;
1337
1338         /* fsnotify_alloc_group takes a ref.  Dropped in fanotify_release */
1339         group = fsnotify_alloc_user_group(&fanotify_fsnotify_ops);
1340         if (IS_ERR(group)) {
1341                 return PTR_ERR(group);
1342         }
1343
1344         /* Enforce groups limits per user in all containing user ns */
1345         group->fanotify_data.ucounts = inc_ucount(current_user_ns(),
1346                                                   current_euid(),
1347                                                   UCOUNT_FANOTIFY_GROUPS);
1348         if (!group->fanotify_data.ucounts) {
1349                 fd = -EMFILE;
1350                 goto out_destroy_group;
1351         }
1352
1353         group->fanotify_data.flags = flags | internal_flags;
1354         group->memcg = get_mem_cgroup_from_mm(current->mm);
1355
1356         group->fanotify_data.merge_hash = fanotify_alloc_merge_hash();
1357         if (!group->fanotify_data.merge_hash) {
1358                 fd = -ENOMEM;
1359                 goto out_destroy_group;
1360         }
1361
1362         group->overflow_event = fanotify_alloc_overflow_event();
1363         if (unlikely(!group->overflow_event)) {
1364                 fd = -ENOMEM;
1365                 goto out_destroy_group;
1366         }
1367
1368         if (force_o_largefile())
1369                 event_f_flags |= O_LARGEFILE;
1370         group->fanotify_data.f_flags = event_f_flags;
1371         init_waitqueue_head(&group->fanotify_data.access_waitq);
1372         INIT_LIST_HEAD(&group->fanotify_data.access_list);
1373         switch (class) {
1374         case FAN_CLASS_NOTIF:
1375                 group->priority = FS_PRIO_0;
1376                 break;
1377         case FAN_CLASS_CONTENT:
1378                 group->priority = FS_PRIO_1;
1379                 break;
1380         case FAN_CLASS_PRE_CONTENT:
1381                 group->priority = FS_PRIO_2;
1382                 break;
1383         default:
1384                 fd = -EINVAL;
1385                 goto out_destroy_group;
1386         }
1387
1388         if (flags & FAN_UNLIMITED_QUEUE) {
1389                 fd = -EPERM;
1390                 if (!capable(CAP_SYS_ADMIN))
1391                         goto out_destroy_group;
1392                 group->max_events = UINT_MAX;
1393         } else {
1394                 group->max_events = fanotify_max_queued_events;
1395         }
1396
1397         if (flags & FAN_UNLIMITED_MARKS) {
1398                 fd = -EPERM;
1399                 if (!capable(CAP_SYS_ADMIN))
1400                         goto out_destroy_group;
1401         }
1402
1403         if (flags & FAN_ENABLE_AUDIT) {
1404                 fd = -EPERM;
1405                 if (!capable(CAP_AUDIT_WRITE))
1406                         goto out_destroy_group;
1407         }
1408
1409         fd = anon_inode_getfd("[fanotify]", &fanotify_fops, group, f_flags);
1410         if (fd < 0)
1411                 goto out_destroy_group;
1412
1413         return fd;
1414
1415 out_destroy_group:
1416         fsnotify_destroy_group(group);
1417         return fd;
1418 }
1419
1420 static int fanotify_test_fsid(struct dentry *dentry, __kernel_fsid_t *fsid)
1421 {
1422         __kernel_fsid_t root_fsid;
1423         int err;
1424
1425         /*
1426          * Make sure dentry is not of a filesystem with zero fsid (e.g. fuse).
1427          */
1428         err = vfs_get_fsid(dentry, fsid);
1429         if (err)
1430                 return err;
1431
1432         if (!fsid->val[0] && !fsid->val[1])
1433                 return -ENODEV;
1434
1435         /*
1436          * Make sure dentry is not of a filesystem subvolume (e.g. btrfs)
1437          * which uses a different fsid than sb root.
1438          */
1439         err = vfs_get_fsid(dentry->d_sb->s_root, &root_fsid);
1440         if (err)
1441                 return err;
1442
1443         if (root_fsid.val[0] != fsid->val[0] ||
1444             root_fsid.val[1] != fsid->val[1])
1445                 return -EXDEV;
1446
1447         return 0;
1448 }
1449
1450 /* Check if filesystem can encode a unique fid */
1451 static int fanotify_test_fid(struct dentry *dentry)
1452 {
1453         /*
1454          * We need to make sure that the file system supports at least
1455          * encoding a file handle so user can use name_to_handle_at() to
1456          * compare fid returned with event to the file handle of watched
1457          * objects. However, name_to_handle_at() requires that the
1458          * filesystem also supports decoding file handles.
1459          */
1460         if (!dentry->d_sb->s_export_op ||
1461             !dentry->d_sb->s_export_op->fh_to_dentry)
1462                 return -EOPNOTSUPP;
1463
1464         return 0;
1465 }
1466
1467 static int fanotify_events_supported(struct path *path, __u64 mask)
1468 {
1469         /*
1470          * Some filesystems such as 'proc' acquire unusual locks when opening
1471          * files. For them fanotify permission events have high chances of
1472          * deadlocking the system - open done when reporting fanotify event
1473          * blocks on this "unusual" lock while another process holding the lock
1474          * waits for fanotify permission event to be answered. Just disallow
1475          * permission events for such filesystems.
1476          */
1477         if (mask & FANOTIFY_PERM_EVENTS &&
1478             path->mnt->mnt_sb->s_type->fs_flags & FS_DISALLOW_NOTIFY_PERM)
1479                 return -EINVAL;
1480         return 0;
1481 }
1482
1483 static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,
1484                             int dfd, const char  __user *pathname)
1485 {
1486         struct inode *inode = NULL;
1487         struct vfsmount *mnt = NULL;
1488         struct fsnotify_group *group;
1489         struct fd f;
1490         struct path path;
1491         __kernel_fsid_t __fsid, *fsid = NULL;
1492         u32 valid_mask = FANOTIFY_EVENTS | FANOTIFY_EVENT_FLAGS;
1493         unsigned int mark_type = flags & FANOTIFY_MARK_TYPE_BITS;
1494         bool ignored = flags & FAN_MARK_IGNORED_MASK;
1495         unsigned int obj_type, fid_mode;
1496         u32 umask = 0;
1497         int ret;
1498
1499         pr_debug("%s: fanotify_fd=%d flags=%x dfd=%d pathname=%p mask=%llx\n",
1500                  __func__, fanotify_fd, flags, dfd, pathname, mask);
1501
1502         /* we only use the lower 32 bits as of right now. */
1503         if (upper_32_bits(mask))
1504                 return -EINVAL;
1505
1506         if (flags & ~FANOTIFY_MARK_FLAGS)
1507                 return -EINVAL;
1508
1509         switch (mark_type) {
1510         case FAN_MARK_INODE:
1511                 obj_type = FSNOTIFY_OBJ_TYPE_INODE;
1512                 break;
1513         case FAN_MARK_MOUNT:
1514                 obj_type = FSNOTIFY_OBJ_TYPE_VFSMOUNT;
1515                 break;
1516         case FAN_MARK_FILESYSTEM:
1517                 obj_type = FSNOTIFY_OBJ_TYPE_SB;
1518                 break;
1519         default:
1520                 return -EINVAL;
1521         }
1522
1523         switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE | FAN_MARK_FLUSH)) {
1524         case FAN_MARK_ADD:
1525         case FAN_MARK_REMOVE:
1526                 if (!mask)
1527                         return -EINVAL;
1528                 break;
1529         case FAN_MARK_FLUSH:
1530                 if (flags & ~(FANOTIFY_MARK_TYPE_BITS | FAN_MARK_FLUSH))
1531                         return -EINVAL;
1532                 break;
1533         default:
1534                 return -EINVAL;
1535         }
1536
1537         if (IS_ENABLED(CONFIG_FANOTIFY_ACCESS_PERMISSIONS))
1538                 valid_mask |= FANOTIFY_PERM_EVENTS;
1539
1540         if (mask & ~valid_mask)
1541                 return -EINVAL;
1542
1543         /* Event flags (ONDIR, ON_CHILD) are meaningless in ignored mask */
1544         if (ignored)
1545                 mask &= ~FANOTIFY_EVENT_FLAGS;
1546
1547         f = fdget(fanotify_fd);
1548         if (unlikely(!f.file))
1549                 return -EBADF;
1550
1551         /* verify that this is indeed an fanotify instance */
1552         ret = -EINVAL;
1553         if (unlikely(f.file->f_op != &fanotify_fops))
1554                 goto fput_and_out;
1555         group = f.file->private_data;
1556
1557         /*
1558          * An unprivileged user is not allowed to setup mount nor filesystem
1559          * marks.  This also includes setting up such marks by a group that
1560          * was initialized by an unprivileged user.
1561          */
1562         ret = -EPERM;
1563         if ((!capable(CAP_SYS_ADMIN) ||
1564              FAN_GROUP_FLAG(group, FANOTIFY_UNPRIV)) &&
1565             mark_type != FAN_MARK_INODE)
1566                 goto fput_and_out;
1567
1568         /*
1569          * group->priority == FS_PRIO_0 == FAN_CLASS_NOTIF.  These are not
1570          * allowed to set permissions events.
1571          */
1572         ret = -EINVAL;
1573         if (mask & FANOTIFY_PERM_EVENTS &&
1574             group->priority == FS_PRIO_0)
1575                 goto fput_and_out;
1576
1577         if (mask & FAN_FS_ERROR &&
1578             mark_type != FAN_MARK_FILESYSTEM)
1579                 goto fput_and_out;
1580
1581         /*
1582          * Events that do not carry enough information to report
1583          * event->fd require a group that supports reporting fid.  Those
1584          * events are not supported on a mount mark, because they do not
1585          * carry enough information (i.e. path) to be filtered by mount
1586          * point.
1587          */
1588         fid_mode = FAN_GROUP_FLAG(group, FANOTIFY_FID_BITS);
1589         if (mask & ~(FANOTIFY_FD_EVENTS|FANOTIFY_EVENT_FLAGS) &&
1590             (!fid_mode || mark_type == FAN_MARK_MOUNT))
1591                 goto fput_and_out;
1592
1593         /*
1594          * FAN_RENAME uses special info type records to report the old and
1595          * new parent+name.  Reporting only old and new parent id is less
1596          * useful and was not implemented.
1597          */
1598         if (mask & FAN_RENAME && !(fid_mode & FAN_REPORT_NAME))
1599                 goto fput_and_out;
1600
1601         if (flags & FAN_MARK_FLUSH) {
1602                 ret = 0;
1603                 if (mark_type == FAN_MARK_MOUNT)
1604                         fsnotify_clear_vfsmount_marks_by_group(group);
1605                 else if (mark_type == FAN_MARK_FILESYSTEM)
1606                         fsnotify_clear_sb_marks_by_group(group);
1607                 else
1608                         fsnotify_clear_inode_marks_by_group(group);
1609                 goto fput_and_out;
1610         }
1611
1612         ret = fanotify_find_path(dfd, pathname, &path, flags,
1613                         (mask & ALL_FSNOTIFY_EVENTS), obj_type);
1614         if (ret)
1615                 goto fput_and_out;
1616
1617         if (flags & FAN_MARK_ADD) {
1618                 ret = fanotify_events_supported(&path, mask);
1619                 if (ret)
1620                         goto path_put_and_out;
1621         }
1622
1623         if (fid_mode) {
1624                 ret = fanotify_test_fsid(path.dentry, &__fsid);
1625                 if (ret)
1626                         goto path_put_and_out;
1627
1628                 ret = fanotify_test_fid(path.dentry);
1629                 if (ret)
1630                         goto path_put_and_out;
1631
1632                 fsid = &__fsid;
1633         }
1634
1635         /* inode held in place by reference to path; group by fget on fd */
1636         if (mark_type == FAN_MARK_INODE)
1637                 inode = path.dentry->d_inode;
1638         else
1639                 mnt = path.mnt;
1640
1641         /* Mask out FAN_EVENT_ON_CHILD flag for sb/mount/non-dir marks */
1642         if (mnt || !S_ISDIR(inode->i_mode)) {
1643                 mask &= ~FAN_EVENT_ON_CHILD;
1644                 umask = FAN_EVENT_ON_CHILD;
1645                 /*
1646                  * If group needs to report parent fid, register for getting
1647                  * events with parent/name info for non-directory.
1648                  */
1649                 if ((fid_mode & FAN_REPORT_DIR_FID) &&
1650                     (flags & FAN_MARK_ADD) && !ignored)
1651                         mask |= FAN_EVENT_ON_CHILD;
1652         }
1653
1654         /* create/update an inode mark */
1655         switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE)) {
1656         case FAN_MARK_ADD:
1657                 if (mark_type == FAN_MARK_MOUNT)
1658                         ret = fanotify_add_vfsmount_mark(group, mnt, mask,
1659                                                          flags, fsid);
1660                 else if (mark_type == FAN_MARK_FILESYSTEM)
1661                         ret = fanotify_add_sb_mark(group, mnt->mnt_sb, mask,
1662                                                    flags, fsid);
1663                 else
1664                         ret = fanotify_add_inode_mark(group, inode, mask,
1665                                                       flags, fsid);
1666                 break;
1667         case FAN_MARK_REMOVE:
1668                 if (mark_type == FAN_MARK_MOUNT)
1669                         ret = fanotify_remove_vfsmount_mark(group, mnt, mask,
1670                                                             flags, umask);
1671                 else if (mark_type == FAN_MARK_FILESYSTEM)
1672                         ret = fanotify_remove_sb_mark(group, mnt->mnt_sb, mask,
1673                                                       flags, umask);
1674                 else
1675                         ret = fanotify_remove_inode_mark(group, inode, mask,
1676                                                          flags, umask);
1677                 break;
1678         default:
1679                 ret = -EINVAL;
1680         }
1681
1682 path_put_and_out:
1683         path_put(&path);
1684 fput_and_out:
1685         fdput(f);
1686         return ret;
1687 }
1688
1689 #ifndef CONFIG_ARCH_SPLIT_ARG64
1690 SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
1691                               __u64, mask, int, dfd,
1692                               const char  __user *, pathname)
1693 {
1694         return do_fanotify_mark(fanotify_fd, flags, mask, dfd, pathname);
1695 }
1696 #endif
1697
1698 #if defined(CONFIG_ARCH_SPLIT_ARG64) || defined(CONFIG_COMPAT)
1699 SYSCALL32_DEFINE6(fanotify_mark,
1700                                 int, fanotify_fd, unsigned int, flags,
1701                                 SC_ARG64(mask), int, dfd,
1702                                 const char  __user *, pathname)
1703 {
1704         return do_fanotify_mark(fanotify_fd, flags, SC_VAL64(__u64, mask),
1705                                 dfd, pathname);
1706 }
1707 #endif
1708
1709 /*
1710  * fanotify_user_setup - Our initialization function.  Note that we cannot return
1711  * error because we have compiled-in VFS hooks.  So an (unlikely) failure here
1712  * must result in panic().
1713  */
1714 static int __init fanotify_user_setup(void)
1715 {
1716         struct sysinfo si;
1717         int max_marks;
1718
1719         si_meminfo(&si);
1720         /*
1721          * Allow up to 1% of addressable memory to be accounted for per user
1722          * marks limited to the range [8192, 1048576]. mount and sb marks are
1723          * a lot cheaper than inode marks, but there is no reason for a user
1724          * to have many of those, so calculate by the cost of inode marks.
1725          */
1726         max_marks = (((si.totalram - si.totalhigh) / 100) << PAGE_SHIFT) /
1727                     INODE_MARK_COST;
1728         max_marks = clamp(max_marks, FANOTIFY_OLD_DEFAULT_MAX_MARKS,
1729                                      FANOTIFY_DEFAULT_MAX_USER_MARKS);
1730
1731         BUILD_BUG_ON(FANOTIFY_INIT_FLAGS & FANOTIFY_INTERNAL_GROUP_FLAGS);
1732         BUILD_BUG_ON(HWEIGHT32(FANOTIFY_INIT_FLAGS) != 12);
1733         BUILD_BUG_ON(HWEIGHT32(FANOTIFY_MARK_FLAGS) != 9);
1734
1735         fanotify_mark_cache = KMEM_CACHE(fsnotify_mark,
1736                                          SLAB_PANIC|SLAB_ACCOUNT);
1737         fanotify_fid_event_cachep = KMEM_CACHE(fanotify_fid_event,
1738                                                SLAB_PANIC);
1739         fanotify_path_event_cachep = KMEM_CACHE(fanotify_path_event,
1740                                                 SLAB_PANIC);
1741         if (IS_ENABLED(CONFIG_FANOTIFY_ACCESS_PERMISSIONS)) {
1742                 fanotify_perm_event_cachep =
1743                         KMEM_CACHE(fanotify_perm_event, SLAB_PANIC);
1744         }
1745
1746         fanotify_max_queued_events = FANOTIFY_DEFAULT_MAX_EVENTS;
1747         init_user_ns.ucount_max[UCOUNT_FANOTIFY_GROUPS] =
1748                                         FANOTIFY_DEFAULT_MAX_GROUPS;
1749         init_user_ns.ucount_max[UCOUNT_FANOTIFY_MARKS] = max_marks;
1750         fanotify_sysctls_init();
1751
1752         return 0;
1753 }
1754 device_initcall(fanotify_user_setup);