diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/auditsc.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 40743af02d8f..19b232f86d70 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -120,6 +120,7 @@ struct audit_names { | |||
120 | struct audit_cap_data fcap; | 120 | struct audit_cap_data fcap; |
121 | unsigned int fcap_ver; | 121 | unsigned int fcap_ver; |
122 | int name_len; /* number of name's characters to log */ | 122 | int name_len; /* number of name's characters to log */ |
123 | unsigned char type; /* record type */ | ||
123 | bool name_put; /* call __putname() for this name */ | 124 | bool name_put; /* call __putname() for this name */ |
124 | /* | 125 | /* |
125 | * This was an allocated audit_names and not from the array of | 126 | * This was an allocated audit_names and not from the array of |
@@ -1995,7 +1996,8 @@ retry: | |||
1995 | #endif | 1996 | #endif |
1996 | } | 1997 | } |
1997 | 1998 | ||
1998 | static struct audit_names *audit_alloc_name(struct audit_context *context) | 1999 | static struct audit_names *audit_alloc_name(struct audit_context *context, |
2000 | unsigned char type) | ||
1999 | { | 2001 | { |
2000 | struct audit_names *aname; | 2002 | struct audit_names *aname; |
2001 | 2003 | ||
@@ -2010,6 +2012,7 @@ static struct audit_names *audit_alloc_name(struct audit_context *context) | |||
2010 | } | 2012 | } |
2011 | 2013 | ||
2012 | aname->ino = (unsigned long)-1; | 2014 | aname->ino = (unsigned long)-1; |
2015 | aname->type = type; | ||
2013 | list_add_tail(&aname->list, &context->names_list); | 2016 | list_add_tail(&aname->list, &context->names_list); |
2014 | 2017 | ||
2015 | context->name_count++; | 2018 | context->name_count++; |
@@ -2040,7 +2043,7 @@ void __audit_getname(const char *name) | |||
2040 | return; | 2043 | return; |
2041 | } | 2044 | } |
2042 | 2045 | ||
2043 | n = audit_alloc_name(context); | 2046 | n = audit_alloc_name(context, AUDIT_TYPE_UNKNOWN); |
2044 | if (!n) | 2047 | if (!n) |
2045 | return; | 2048 | return; |
2046 | 2049 | ||
@@ -2157,12 +2160,13 @@ void __audit_inode(const char *name, const struct dentry *dentry) | |||
2157 | 2160 | ||
2158 | out_alloc: | 2161 | out_alloc: |
2159 | /* unable to find the name from a previous getname() */ | 2162 | /* unable to find the name from a previous getname() */ |
2160 | n = audit_alloc_name(context); | 2163 | n = audit_alloc_name(context, AUDIT_TYPE_NORMAL); |
2161 | if (!n) | 2164 | if (!n) |
2162 | return; | 2165 | return; |
2163 | out: | 2166 | out: |
2164 | handle_path(dentry); | 2167 | handle_path(dentry); |
2165 | audit_copy_inode(n, dentry, inode); | 2168 | audit_copy_inode(n, dentry, inode); |
2169 | n->type = AUDIT_TYPE_NORMAL; | ||
2166 | } | 2170 | } |
2167 | 2171 | ||
2168 | /** | 2172 | /** |
@@ -2219,6 +2223,7 @@ void __audit_inode_child(const struct inode *parent, | |||
2219 | audit_copy_inode(n, dentry, inode); | 2223 | audit_copy_inode(n, dentry, inode); |
2220 | else | 2224 | else |
2221 | n->ino = (unsigned long)-1; | 2225 | n->ino = (unsigned long)-1; |
2226 | n->type = AUDIT_TYPE_NORMAL; | ||
2222 | found_child = n->name; | 2227 | found_child = n->name; |
2223 | goto add_names; | 2228 | goto add_names; |
2224 | } | 2229 | } |
@@ -2226,14 +2231,14 @@ void __audit_inode_child(const struct inode *parent, | |||
2226 | 2231 | ||
2227 | add_names: | 2232 | add_names: |
2228 | if (!found_parent) { | 2233 | if (!found_parent) { |
2229 | n = audit_alloc_name(context); | 2234 | n = audit_alloc_name(context, AUDIT_TYPE_NORMAL); |
2230 | if (!n) | 2235 | if (!n) |
2231 | return; | 2236 | return; |
2232 | audit_copy_inode(n, NULL, parent); | 2237 | audit_copy_inode(n, NULL, parent); |
2233 | } | 2238 | } |
2234 | 2239 | ||
2235 | if (!found_child) { | 2240 | if (!found_child) { |
2236 | n = audit_alloc_name(context); | 2241 | n = audit_alloc_name(context, AUDIT_TYPE_NORMAL); |
2237 | if (!n) | 2242 | if (!n) |
2238 | return; | 2243 | return; |
2239 | 2244 | ||