diff options
author | Amy Griffis <amy.griffis@hp.com> | 2006-07-13 13:16:02 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2006-08-03 10:50:21 -0400 |
commit | 3e2efce067cec0099f99ae59f28feda99b02b498 (patch) | |
tree | 94577cb6cb7f223319bb89a805b2d6945d42632e /include/linux | |
parent | 46f5960fdbf359f0c75989854bbaebc1de7a1eb4 (diff) |
[PATCH] fix faulty inode data collection for open() with O_CREAT
When the specified path is an existing file or when it is a symlink, audit
collects the wrong inode number, which causes it to miss the open() event.
Adding a second hook to the open() path fixes this.
Also add audit_copy_inode() to consolidate some code.
Signed-off-by: Amy Griffis <amy.griffis@hp.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/audit.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/audit.h b/include/linux/audit.h index b27d7debc5a1..e7e5e5348987 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
@@ -328,6 +328,7 @@ extern void audit_putname(const char *name); | |||
328 | extern void __audit_inode(const char *name, const struct inode *inode); | 328 | extern void __audit_inode(const char *name, const struct inode *inode); |
329 | extern void __audit_inode_child(const char *dname, const struct inode *inode, | 329 | extern void __audit_inode_child(const char *dname, const struct inode *inode, |
330 | unsigned long pino); | 330 | unsigned long pino); |
331 | extern void __audit_inode_update(const struct inode *inode); | ||
331 | static inline void audit_getname(const char *name) | 332 | static inline void audit_getname(const char *name) |
332 | { | 333 | { |
333 | if (unlikely(current->audit_context)) | 334 | if (unlikely(current->audit_context)) |
@@ -343,6 +344,10 @@ static inline void audit_inode_child(const char *dname, | |||
343 | if (unlikely(current->audit_context)) | 344 | if (unlikely(current->audit_context)) |
344 | __audit_inode_child(dname, inode, pino); | 345 | __audit_inode_child(dname, inode, pino); |
345 | } | 346 | } |
347 | static inline void audit_inode_update(const struct inode *inode) { | ||
348 | if (unlikely(current->audit_context)) | ||
349 | __audit_inode_update(inode); | ||
350 | } | ||
346 | 351 | ||
347 | /* Private API (for audit.c only) */ | 352 | /* Private API (for audit.c only) */ |
348 | extern unsigned int audit_serial(void); | 353 | extern unsigned int audit_serial(void); |
@@ -414,8 +419,10 @@ static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | |||
414 | #define audit_putname(n) do { ; } while (0) | 419 | #define audit_putname(n) do { ; } while (0) |
415 | #define __audit_inode(n,i) do { ; } while (0) | 420 | #define __audit_inode(n,i) do { ; } while (0) |
416 | #define __audit_inode_child(d,i,p) do { ; } while (0) | 421 | #define __audit_inode_child(d,i,p) do { ; } while (0) |
422 | #define __audit_inode_update(i) do { ; } while (0) | ||
417 | #define audit_inode(n,i) do { ; } while (0) | 423 | #define audit_inode(n,i) do { ; } while (0) |
418 | #define audit_inode_child(d,i,p) do { ; } while (0) | 424 | #define audit_inode_child(d,i,p) do { ; } while (0) |
425 | #define audit_inode_update(i) do { ; } while (0) | ||
419 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 426 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) |
420 | #define audit_get_loginuid(c) ({ -1; }) | 427 | #define audit_get_loginuid(c) ({ -1; }) |
421 | #define audit_ipc_obj(i) ({ 0; }) | 428 | #define audit_ipc_obj(i) ({ 0; }) |