summaryrefslogtreecommitdiffstats
path: root/kernel/audit_watch.c
AgeCommit message (Expand)Author
2020-07-27fsnotify: create method handle_inode_event() in fsnotify_operationsAmir Goldstein
2020-07-27audit: do not set FS_EVENT_ON_CHILD in audit marks maskAmir Goldstein
2020-07-27fsnotify: pass dir argument to handle_event() callbackAmir Goldstein
2020-04-06Merge tag 'fsnotify_for_v5.7-rc1' of git://git.kernel.org/pub/scm/linux/kerne...Linus Torvalds
2020-03-23fsnotify: use helpers to access data by data_typeAmir Goldstein
2020-02-10audit: CONFIG_CHANGE don't log internal bookkeeping as an eventSteve Grubb
2019-11-10audit_get_nd(): don't unlock parent too earlyAl Viro
2019-05-30treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156Thomas Gleixner
2019-04-28audit_compare_dname_path(): switch to const struct qstr *Al Viro
2019-04-26audit_update_watch(): switch to const struct qstr *Al Viro
2019-04-26fsnotify: switch send_to_group() and ->handle_event to const struct qstr *Al Viro
2019-01-18audit: add syscall information to CONFIG_CHANGE recordsRichard Guy Briggs
2018-11-26audit: minimize our use of audit_log_format()Paul Moore
2018-11-19audit: use session_info helperRichard Guy Briggs
2018-07-18audit: fix use-after-free in audit_add_watchRonny Chevalier
2018-06-28audit: simplify audit_enabled check in audit_watch_log_rule_change()Richard Guy Briggs
2018-06-17Merge tag 'fsnotify_for_v4.18-rc1' of git://git.kernel.org/pub/scm/linux/kern...Linus Torvalds
2018-05-18fsnotify: add fsnotify_add_inode_mark() wrappersAmir Goldstein
2018-05-18fsnotify: remove redundant arguments to handle_event()Amir Goldstein
2018-05-14audit: use inline function to get audit contextRichard Guy Briggs
2017-08-16Merge tag 'audit-pr-20170816' of git://git.kernel.org/pub/scm/linux/kernel/gi...Linus Torvalds
2017-08-15audit: Receive unmount eventJan Kara
2017-08-15audit: Fix use after free in audit_remove_watch_rule()Jan Kara
2017-05-03Merge branch 'fsnotify' of git://git.kernel.org/pub/scm/linux/kernel/git/jack...Linus Torvalds
2017-05-02audit: convert audit_watch.count from atomic_t to refcount_tElena Reshetova
2017-05-02audit: remove unnecessary semicolon in audit_watch_handle_event()Nicholas Mc Guire
2017-04-10fsnotify: Move ->free_mark callback to fsnotify_opsJan Kara
2017-04-10fsnotify: Add group pointer in fsnotify_init_mark()Jan Kara
2017-04-10fsnotify: Remove fsnotify_find_{inode|vfsmount}_mark()Jan Kara
2017-04-10fsnotify: Pass fsnotify_iter_info into handle_event handlerJan Kara
2016-12-17Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vir...Linus Torvalds
2016-12-16Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vir...Linus Torvalds
2016-12-05fsnotify: constify 'data' passed to ->handle_event()Al Viro
2016-12-04don't open-code file_inode()Al Viro
2016-11-20audit: fix formatting of AUDIT_CONFIG_CHANGE eventsSteve Grubb
2016-09-01Merge branch 'stable-4.8' of git://git.infradead.org/users/pcmoore/auditLinus Torvalds
2016-08-31audit: fix exe_file access in audit_exe_compareMateusz Guzik
2016-04-10don't bother with ->d_inode->i_sb - it's always equal to ->d_sbAl Viro
2016-03-19Merge branch 'stable-4.6' of git://git.infradead.org/users/pcmoore/auditLinus Torvalds
2016-02-08audit: Fix typo in commentWei Yuan
2016-01-22wrappers for ->i_mutex accessAl Viro
2015-09-08Merge branch 'upstream' of git://git.infradead.org/users/pcmoore/auditLinus Torvalds
2015-08-12fixup: audit: implement audit by executableRichard Guy Briggs
2015-08-06audit: implement audit by executableRichard Guy Briggs
2015-08-06audit: use macros for unset inode and device valuesRichard Guy Briggs
2015-08-04audit: eliminate unnecessary extra layer of watch parent referencesRichard Guy Briggs
2015-08-04audit: eliminate unnecessary extra layer of watch referencesRichard Guy Briggs
2015-04-15VFS: audit: d_backing_inode() annotationsDavid Howells
2014-09-23audit: invalid op= values for rulesBurn Alting
2014-02-18inotify: Fix reporting of cookies for inotify eventsJan Kara
lude <linux/reboot.h> #include <linux/prctl.h> #include <linux/capability.h> #include <linux/init.h> #include <linux/highuid.h> #include <linux/security.h> #include <linux/cred.h> #include <linux/syscalls.h> #include <linux/uaccess.h> #include "uid16.h" SYSCALL_DEFINE3(chown16, const char __user *, filename, old_uid_t, user, old_gid_t, group) { return ksys_chown(filename, low2highuid(user), low2highgid(group)); } SYSCALL_DEFINE3(lchown16, const char __user *, filename, old_uid_t, user, old_gid_t, group) { return ksys_lchown(filename, low2highuid(user), low2highgid(group)); } SYSCALL_DEFINE3(fchown16, unsigned int, fd, old_uid_t, user, old_gid_t, group) { return ksys_fchown(fd, low2highuid(user), low2highgid(group)); } SYSCALL_DEFINE2(setregid16, old_gid_t, rgid, old_gid_t, egid) { return __sys_setregid(low2highgid(rgid), low2highgid(egid)); } SYSCALL_DEFINE1(setgid16, old_gid_t, gid) { return __sys_setgid(low2highgid(gid)); } SYSCALL_DEFINE2(setreuid16, old_uid_t, ruid, old_uid_t, euid) { return __sys_setreuid(low2highuid(ruid), low2highuid(euid)); } SYSCALL_DEFINE1(setuid16, old_uid_t, uid) { return __sys_setuid(low2highuid(uid)); } SYSCALL_DEFINE3(setresuid16, old_uid_t, ruid, old_uid_t, euid, old_uid_t, suid) { return __sys_setresuid(low2highuid(ruid), low2highuid(euid), low2highuid(suid)); } SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruidp, old_uid_t __user *, euidp, old_uid_t __user *, suidp) { const struct cred *cred = current_cred(); int retval; old_uid_t ruid, euid, suid; ruid = high2lowuid(from_kuid_munged(cred->user_ns, cred->uid)); euid = high2lowuid(from_kuid_munged(cred->user_ns, cred->euid)); suid = high2lowuid(from_kuid_munged(cred->user_ns, cred->suid)); if (!(retval = put_user(ruid, ruidp)) && !(retval = put_user(euid, euidp))) retval = put_user(suid, suidp); return retval; } SYSCALL_DEFINE3(setresgid16, old_gid_t, rgid, old_gid_t, egid, old_gid_t, sgid) { return __sys_setresgid(low2highgid(rgid), low2highgid(egid), low2highgid(sgid)); } SYSCALL_DEFINE3(getresgid16, old_gid_t __user *, rgidp, old_gid_t __user *, egidp, old_gid_t __user *, sgidp) { const struct cred *cred = current_cred(); int retval; old_gid_t rgid, egid, sgid; rgid = high2lowgid(from_kgid_munged(cred->user_ns, cred->gid)); egid = high2lowgid(from_kgid_munged(cred->user_ns, cred->egid)); sgid = high2lowgid(from_kgid_munged(cred->user_ns, cred->sgid)); if (!(retval = put_user(rgid, rgidp)) && !(retval = put_user(egid, egidp))) retval = put_user(sgid, sgidp); return retval; } SYSCALL_DEFINE1(setfsuid16, old_uid_t, uid) { return __sys_setfsuid(low2highuid(uid)); } SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid) { return __sys_setfsgid(low2highgid(gid)); } static int groups16_to_user(old_gid_t __user *grouplist, struct group_info *group_info) { struct user_namespace *user_ns = current_user_ns(); int i; old_gid_t group; kgid_t kgid; for (i = 0; i < group_info->ngroups; i++) { kgid = group_info->gid[i]; group = high2lowgid(from_kgid_munged(user_ns, kgid)); if (put_user(group, grouplist+i)) return -EFAULT; } return 0; } static int groups16_from_user(struct group_info *group_info, old_gid_t __user *grouplist) { struct user_namespace *user_ns = current_user_ns(); int i; old_gid_t group; kgid_t kgid; for (i = 0; i < group_info->ngroups; i++) { if (get_user(group, grouplist+i)) return -EFAULT; kgid = make_kgid(user_ns, low2highgid(group)); if (!gid_valid(kgid)) return -EINVAL; group_info->gid[i] = kgid; } return 0; } SYSCALL_DEFINE2(getgroups16, int, gidsetsize, old_gid_t __user *, grouplist) { const struct cred *cred = current_cred(); int i; if (gidsetsize < 0) return -EINVAL; i = cred->group_info->ngroups; if (gidsetsize) { if (i > gidsetsize) { i = -EINVAL; goto out; } if (groups16_to_user(grouplist, cred->group_info)) { i = -EFAULT; goto out; } } out: return i; } SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist) { struct group_info *group_info; int retval; if (!may_setgroups()) return -EPERM; if ((unsigned)gidsetsize > NGROUPS_MAX) return -EINVAL; group_info = groups_alloc(gidsetsize); if (!group_info) return -ENOMEM; retval = groups16_from_user(group_info, grouplist); if (retval) { put_group_info(group_info); return retval; } groups_sort(group_info); retval = set_current_groups(group_info); put_group_info(group_info); return retval; } SYSCALL_DEFINE0(getuid16) { return high2lowuid(from_kuid_munged(current_user_ns(), current_uid())); } SYSCALL_DEFINE0(geteuid16) { return high2lowuid(from_kuid_munged(current_user_ns(), current_euid())); } SYSCALL_DEFINE0(getgid16) { return high2lowgid(from_kgid_munged(current_user_ns(), current_gid())); } SYSCALL_DEFINE0(getegid16) { return high2lowgid(from_kgid_munged(current_user_ns(), current_egid())); }