diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-21 11:54:32 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-21 11:54:32 -0400 |
| commit | 2fb59d623ad85dfdb8ce03a660051743f7361896 (patch) | |
| tree | 3991ab2b88cc369444c136089d9c1570c26c6072 /include | |
| parent | efdc31319d43050a5742fb690b1a4beb68092a94 (diff) | |
| parent | 74c3cbe33bc077ac1159cadfea608b501e100344 (diff) | |
Merge branch 'audit.b43' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current
* 'audit.b43' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current:
[PATCH] audit: watching subtrees
[PATCH] new helper - inotify_evict_watch()
[PATCH] new helper - inotify_clone_watch()
[PATCH] new helpers - collect_mounts() and release_collected_mounts()
[PATCH] pass dentry to audit_inode()/audit_inode_child()
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/audit.h | 19 | ||||
| -rw-r--r-- | include/linux/dcache.h | 1 | ||||
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | include/linux/fsnotify.h | 9 | ||||
| -rw-r--r-- | include/linux/inotify.h | 2 |
5 files changed, 21 insertions, 12 deletions
diff --git a/include/linux/audit.h b/include/linux/audit.h index 9ae740936a65..c68781692838 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -63,6 +63,8 @@ | |||
| 63 | #define AUDIT_ADD_RULE 1011 /* Add syscall filtering rule */ | 63 | #define AUDIT_ADD_RULE 1011 /* Add syscall filtering rule */ |
| 64 | #define AUDIT_DEL_RULE 1012 /* Delete syscall filtering rule */ | 64 | #define AUDIT_DEL_RULE 1012 /* Delete syscall filtering rule */ |
| 65 | #define AUDIT_LIST_RULES 1013 /* List syscall filtering rules */ | 65 | #define AUDIT_LIST_RULES 1013 /* List syscall filtering rules */ |
| 66 | #define AUDIT_TRIM 1014 /* Trim junk from watched tree */ | ||
| 67 | #define AUDIT_MAKE_EQUIV 1015 /* Append to watched tree */ | ||
| 66 | #define AUDIT_TTY_GET 1016 /* Get TTY auditing status */ | 68 | #define AUDIT_TTY_GET 1016 /* Get TTY auditing status */ |
| 67 | #define AUDIT_TTY_SET 1017 /* Set TTY auditing status */ | 69 | #define AUDIT_TTY_SET 1017 /* Set TTY auditing status */ |
| 68 | 70 | ||
| @@ -203,6 +205,7 @@ | |||
| 203 | #define AUDIT_SUCCESS 104 /* exit >= 0; value ignored */ | 205 | #define AUDIT_SUCCESS 104 /* exit >= 0; value ignored */ |
| 204 | #define AUDIT_WATCH 105 | 206 | #define AUDIT_WATCH 105 |
| 205 | #define AUDIT_PERM 106 | 207 | #define AUDIT_PERM 106 |
| 208 | #define AUDIT_DIR 107 | ||
| 206 | 209 | ||
| 207 | #define AUDIT_ARG0 200 | 210 | #define AUDIT_ARG0 200 |
| 208 | #define AUDIT_ARG1 (AUDIT_ARG0+1) | 211 | #define AUDIT_ARG1 (AUDIT_ARG0+1) |
| @@ -366,8 +369,8 @@ extern void audit_syscall_entry(int arch, | |||
| 366 | extern void audit_syscall_exit(int failed, long return_code); | 369 | extern void audit_syscall_exit(int failed, long return_code); |
| 367 | extern void __audit_getname(const char *name); | 370 | extern void __audit_getname(const char *name); |
| 368 | extern void audit_putname(const char *name); | 371 | extern void audit_putname(const char *name); |
| 369 | extern void __audit_inode(const char *name, const struct inode *inode); | 372 | extern void __audit_inode(const char *name, const struct dentry *dentry); |
| 370 | extern void __audit_inode_child(const char *dname, const struct inode *inode, | 373 | extern void __audit_inode_child(const char *dname, const struct dentry *dentry, |
| 371 | const struct inode *parent); | 374 | const struct inode *parent); |
| 372 | extern void __audit_ptrace(struct task_struct *t); | 375 | extern void __audit_ptrace(struct task_struct *t); |
| 373 | 376 | ||
| @@ -381,15 +384,15 @@ static inline void audit_getname(const char *name) | |||
| 381 | if (unlikely(!audit_dummy_context())) | 384 | if (unlikely(!audit_dummy_context())) |
| 382 | __audit_getname(name); | 385 | __audit_getname(name); |
| 383 | } | 386 | } |
| 384 | static inline void audit_inode(const char *name, const struct inode *inode) { | 387 | static inline void audit_inode(const char *name, const struct dentry *dentry) { |
| 385 | if (unlikely(!audit_dummy_context())) | 388 | if (unlikely(!audit_dummy_context())) |
| 386 | __audit_inode(name, inode); | 389 | __audit_inode(name, dentry); |
| 387 | } | 390 | } |
| 388 | static inline void audit_inode_child(const char *dname, | 391 | static inline void audit_inode_child(const char *dname, |
| 389 | const struct inode *inode, | 392 | const struct dentry *dentry, |
| 390 | const struct inode *parent) { | 393 | const struct inode *parent) { |
| 391 | if (unlikely(!audit_dummy_context())) | 394 | if (unlikely(!audit_dummy_context())) |
| 392 | __audit_inode_child(dname, inode, parent); | 395 | __audit_inode_child(dname, dentry, parent); |
| 393 | } | 396 | } |
| 394 | void audit_core_dumps(long signr); | 397 | void audit_core_dumps(long signr); |
| 395 | 398 | ||
| @@ -477,9 +480,9 @@ extern int audit_signals; | |||
| 477 | #define audit_dummy_context() 1 | 480 | #define audit_dummy_context() 1 |
| 478 | #define audit_getname(n) do { ; } while (0) | 481 | #define audit_getname(n) do { ; } while (0) |
| 479 | #define audit_putname(n) do { ; } while (0) | 482 | #define audit_putname(n) do { ; } while (0) |
| 480 | #define __audit_inode(n,i) do { ; } while (0) | 483 | #define __audit_inode(n,d) do { ; } while (0) |
| 481 | #define __audit_inode_child(d,i,p) do { ; } while (0) | 484 | #define __audit_inode_child(d,i,p) do { ; } while (0) |
| 482 | #define audit_inode(n,i) do { ; } while (0) | 485 | #define audit_inode(n,d) do { ; } while (0) |
| 483 | #define audit_inode_child(d,i,p) do { ; } while (0) | 486 | #define audit_inode_child(d,i,p) do { ; } while (0) |
| 484 | #define audit_core_dumps(i) do { ; } while (0) | 487 | #define audit_core_dumps(i) do { ; } while (0) |
| 485 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 488 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index aab53df4fafa..c2c153f97e8f 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -178,6 +178,7 @@ d_iput: no no no yes | |||
| 178 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 /* Parent inode is watched */ | 178 | #define DCACHE_INOTIFY_PARENT_WATCHED 0x0020 /* Parent inode is watched */ |
| 179 | 179 | ||
| 180 | extern spinlock_t dcache_lock; | 180 | extern spinlock_t dcache_lock; |
| 181 | extern seqlock_t rename_lock; | ||
| 181 | 182 | ||
| 182 | /** | 183 | /** |
| 183 | * d_drop - drop a dentry | 184 | * d_drop - drop a dentry |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 1bcce660cf03..50078bb30a1c 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -1470,6 +1470,8 @@ extern long do_mount(char *, char *, char *, unsigned long, void *); | |||
| 1470 | extern struct vfsmount *copy_tree(struct vfsmount *, struct dentry *, int); | 1470 | extern struct vfsmount *copy_tree(struct vfsmount *, struct dentry *, int); |
| 1471 | extern void mnt_set_mountpoint(struct vfsmount *, struct dentry *, | 1471 | extern void mnt_set_mountpoint(struct vfsmount *, struct dentry *, |
| 1472 | struct vfsmount *); | 1472 | struct vfsmount *); |
| 1473 | extern struct vfsmount *collect_mounts(struct vfsmount *, struct dentry *); | ||
| 1474 | extern void drop_collected_mounts(struct vfsmount *); | ||
| 1473 | 1475 | ||
| 1474 | extern int vfs_statfs(struct dentry *, struct kstatfs *); | 1476 | extern int vfs_statfs(struct dentry *, struct kstatfs *); |
| 1475 | 1477 | ||
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index dfc4e4f68da4..2bd31fa623b6 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -41,8 +41,9 @@ static inline void fsnotify_d_move(struct dentry *entry) | |||
| 41 | */ | 41 | */ |
| 42 | static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | 42 | static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, |
| 43 | const char *old_name, const char *new_name, | 43 | const char *old_name, const char *new_name, |
| 44 | int isdir, struct inode *target, struct inode *source) | 44 | int isdir, struct inode *target, struct dentry *moved) |
| 45 | { | 45 | { |
| 46 | struct inode *source = moved->d_inode; | ||
| 46 | u32 cookie = inotify_get_cookie(); | 47 | u32 cookie = inotify_get_cookie(); |
| 47 | 48 | ||
| 48 | if (old_dir == new_dir) | 49 | if (old_dir == new_dir) |
| @@ -67,7 +68,7 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | |||
| 67 | if (source) { | 68 | if (source) { |
| 68 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); | 69 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); |
| 69 | } | 70 | } |
| 70 | audit_inode_child(new_name, source, new_dir); | 71 | audit_inode_child(new_name, moved, new_dir); |
| 71 | } | 72 | } |
| 72 | 73 | ||
| 73 | /* | 74 | /* |
| @@ -98,7 +99,7 @@ static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) | |||
| 98 | inode_dir_notify(inode, DN_CREATE); | 99 | inode_dir_notify(inode, DN_CREATE); |
| 99 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, | 100 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, |
| 100 | dentry->d_inode); | 101 | dentry->d_inode); |
| 101 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode); | 102 | audit_inode_child(dentry->d_name.name, dentry, inode); |
| 102 | } | 103 | } |
| 103 | 104 | ||
| 104 | /* | 105 | /* |
| @@ -109,7 +110,7 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | |||
| 109 | inode_dir_notify(inode, DN_CREATE); | 110 | inode_dir_notify(inode, DN_CREATE); |
| 110 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, | 111 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, |
| 111 | dentry->d_name.name, dentry->d_inode); | 112 | dentry->d_name.name, dentry->d_inode); |
| 112 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode); | 113 | audit_inode_child(dentry->d_name.name, dentry, inode); |
| 113 | } | 114 | } |
| 114 | 115 | ||
| 115 | /* | 116 | /* |
diff --git a/include/linux/inotify.h b/include/linux/inotify.h index d4f48c6402e6..742b917e7d1b 100644 --- a/include/linux/inotify.h +++ b/include/linux/inotify.h | |||
| @@ -120,6 +120,8 @@ extern __s32 inotify_find_update_watch(struct inotify_handle *, struct inode *, | |||
| 120 | u32); | 120 | u32); |
| 121 | extern __s32 inotify_add_watch(struct inotify_handle *, struct inotify_watch *, | 121 | extern __s32 inotify_add_watch(struct inotify_handle *, struct inotify_watch *, |
| 122 | struct inode *, __u32); | 122 | struct inode *, __u32); |
| 123 | extern __s32 inotify_clone_watch(struct inotify_watch *, struct inotify_watch *); | ||
| 124 | extern void inotify_evict_watch(struct inotify_watch *); | ||
| 123 | extern int inotify_rm_watch(struct inotify_handle *, struct inotify_watch *); | 125 | extern int inotify_rm_watch(struct inotify_handle *, struct inotify_watch *); |
| 124 | extern int inotify_rm_wd(struct inotify_handle *, __u32); | 126 | extern int inotify_rm_wd(struct inotify_handle *, __u32); |
| 125 | extern void inotify_remove_watch_locked(struct inotify_handle *, | 127 | extern void inotify_remove_watch_locked(struct inotify_handle *, |
