aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorAmy Griffis <amy.griffis@hp.com>2006-07-13 13:16:02 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2006-08-03 10:50:21 -0400
commit3e2efce067cec0099f99ae59f28feda99b02b498 (patch)
tree94577cb6cb7f223319bb89a805b2d6945d42632e /include/linux
parent46f5960fdbf359f0c75989854bbaebc1de7a1eb4 (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.h7
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);
328extern void __audit_inode(const char *name, const struct inode *inode); 328extern void __audit_inode(const char *name, const struct inode *inode);
329extern void __audit_inode_child(const char *dname, const struct inode *inode, 329extern void __audit_inode_child(const char *dname, const struct inode *inode,
330 unsigned long pino); 330 unsigned long pino);
331extern void __audit_inode_update(const struct inode *inode);
331static inline void audit_getname(const char *name) 332static 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}
347static 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) */
348extern unsigned int audit_serial(void); 353extern 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; })