diff options
author | Jeff Layton <jlayton@redhat.com> | 2012-10-10 15:25:25 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-12 00:32:03 -0400 |
commit | 4fa6b5ecbf092c6ee752ece8a55d71f663d23254 (patch) | |
tree | 6143912dc73b457a3be72faf31d46d855d3f87c3 /include/linux/audit.h | |
parent | e3d6b07b8ba161f638b026feba0c3c97875d7f1c (diff) |
audit: overhaul __audit_inode_child to accomodate retrying
In order to accomodate retrying path-based syscalls, we need to add a
new "type" argument to audit_inode_child. This will tell us whether
we're looking for a child entry that represents a create or a delete.
If we find a parent, don't automatically assume that we need to create a
new entry. Instead, use the information we have to try to find an
existing entry first. Update it if one is found and create a new one if
not.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux/audit.h')
-rw-r--r-- | include/linux/audit.h | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/include/linux/audit.h b/include/linux/audit.h index b11f517dce04..3df643d1ac5b 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -457,6 +457,8 @@ extern int audit_classify_arch(int arch); | |||
457 | #define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */ | 457 | #define AUDIT_TYPE_UNKNOWN 0 /* we don't know yet */ |
458 | #define AUDIT_TYPE_NORMAL 1 /* a "normal" audit record */ | 458 | #define AUDIT_TYPE_NORMAL 1 /* a "normal" audit record */ |
459 | #define AUDIT_TYPE_PARENT 2 /* a parent audit record */ | 459 | #define AUDIT_TYPE_PARENT 2 /* a parent audit record */ |
460 | #define AUDIT_TYPE_CHILD_DELETE 3 /* a child being deleted */ | ||
461 | #define AUDIT_TYPE_CHILD_CREATE 4 /* a child being created */ | ||
460 | 462 | ||
461 | #ifdef CONFIG_AUDITSYSCALL | 463 | #ifdef CONFIG_AUDITSYSCALL |
462 | /* These are defined in auditsc.c */ | 464 | /* These are defined in auditsc.c */ |
@@ -472,7 +474,8 @@ extern void audit_putname(const char *name); | |||
472 | extern void __audit_inode(const char *name, const struct dentry *dentry, | 474 | extern void __audit_inode(const char *name, const struct dentry *dentry, |
473 | unsigned int parent); | 475 | unsigned int parent); |
474 | extern void __audit_inode_child(const struct inode *parent, | 476 | extern void __audit_inode_child(const struct inode *parent, |
475 | const struct dentry *dentry); | 477 | const struct dentry *dentry, |
478 | const unsigned char type); | ||
476 | extern void __audit_seccomp(unsigned long syscall, long signr, int code); | 479 | extern void __audit_seccomp(unsigned long syscall, long signr, int code); |
477 | extern void __audit_ptrace(struct task_struct *t); | 480 | extern void __audit_ptrace(struct task_struct *t); |
478 | 481 | ||
@@ -513,9 +516,10 @@ static inline void audit_inode(const char *name, const struct dentry *dentry, | |||
513 | __audit_inode(name, dentry, parent); | 516 | __audit_inode(name, dentry, parent); |
514 | } | 517 | } |
515 | static inline void audit_inode_child(const struct inode *parent, | 518 | static inline void audit_inode_child(const struct inode *parent, |
516 | const struct dentry *dentry) { | 519 | const struct dentry *dentry, |
520 | const unsigned char type) { | ||
517 | if (unlikely(!audit_dummy_context())) | 521 | if (unlikely(!audit_dummy_context())) |
518 | __audit_inode_child(parent, dentry); | 522 | __audit_inode_child(parent, dentry, type); |
519 | } | 523 | } |
520 | void audit_core_dumps(long signr); | 524 | void audit_core_dumps(long signr); |
521 | 525 | ||
@@ -667,13 +671,15 @@ static inline void __audit_inode(const char *name, const struct dentry *dentry, | |||
667 | unsigned int parent) | 671 | unsigned int parent) |
668 | { } | 672 | { } |
669 | static inline void __audit_inode_child(const struct inode *parent, | 673 | static inline void __audit_inode_child(const struct inode *parent, |
670 | const struct dentry *dentry) | 674 | const struct dentry *dentry, |
675 | const unsigned char type) | ||
671 | { } | 676 | { } |
672 | static inline void audit_inode(const char *name, const struct dentry *dentry, | 677 | static inline void audit_inode(const char *name, const struct dentry *dentry, |
673 | unsigned int parent) | 678 | unsigned int parent) |
674 | { } | 679 | { } |
675 | static inline void audit_inode_child(const struct inode *parent, | 680 | static inline void audit_inode_child(const struct inode *parent, |
676 | const struct dentry *dentry) | 681 | const struct dentry *dentry, |
682 | const unsigned char type) | ||
677 | { } | 683 | { } |
678 | static inline void audit_core_dumps(long signr) | 684 | static inline void audit_core_dumps(long signr) |
679 | { } | 685 | { } |