diff options
Diffstat (limited to 'security/lsm_audit.c')
-rw-r--r-- | security/lsm_audit.c | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/security/lsm_audit.c b/security/lsm_audit.c index 908aa712816a..893af8a2fa1e 100644 --- a/security/lsm_audit.c +++ b/security/lsm_audit.c | |||
@@ -210,7 +210,6 @@ static inline void print_ipv4_addr(struct audit_buffer *ab, __be32 addr, | |||
210 | static void dump_common_audit_data(struct audit_buffer *ab, | 210 | static void dump_common_audit_data(struct audit_buffer *ab, |
211 | struct common_audit_data *a) | 211 | struct common_audit_data *a) |
212 | { | 212 | { |
213 | struct inode *inode = NULL; | ||
214 | struct task_struct *tsk = current; | 213 | struct task_struct *tsk = current; |
215 | 214 | ||
216 | if (a->tsk) | 215 | if (a->tsk) |
@@ -229,33 +228,47 @@ static void dump_common_audit_data(struct audit_buffer *ab, | |||
229 | case LSM_AUDIT_DATA_CAP: | 228 | case LSM_AUDIT_DATA_CAP: |
230 | audit_log_format(ab, " capability=%d ", a->u.cap); | 229 | audit_log_format(ab, " capability=%d ", a->u.cap); |
231 | break; | 230 | break; |
232 | case LSM_AUDIT_DATA_FS: | 231 | case LSM_AUDIT_DATA_PATH: { |
233 | if (a->u.fs.path.dentry) { | 232 | struct inode *inode; |
234 | struct dentry *dentry = a->u.fs.path.dentry; | 233 | |
235 | if (a->u.fs.path.mnt) { | 234 | audit_log_d_path(ab, "path=", &a->u.path); |
236 | audit_log_d_path(ab, "path=", &a->u.fs.path); | 235 | |
237 | } else { | 236 | inode = a->u.path.dentry->d_inode; |
238 | audit_log_format(ab, " name="); | ||
239 | audit_log_untrustedstring(ab, | ||
240 | dentry->d_name.name); | ||
241 | } | ||
242 | inode = dentry->d_inode; | ||
243 | } else if (a->u.fs.inode) { | ||
244 | struct dentry *dentry; | ||
245 | inode = a->u.fs.inode; | ||
246 | dentry = d_find_alias(inode); | ||
247 | if (dentry) { | ||
248 | audit_log_format(ab, " name="); | ||
249 | audit_log_untrustedstring(ab, | ||
250 | dentry->d_name.name); | ||
251 | dput(dentry); | ||
252 | } | ||
253 | } | ||
254 | if (inode) | 237 | if (inode) |
255 | audit_log_format(ab, " dev=%s ino=%lu", | 238 | audit_log_format(ab, " dev=%s ino=%lu", |
256 | inode->i_sb->s_id, | 239 | inode->i_sb->s_id, |
257 | inode->i_ino); | 240 | inode->i_ino); |
258 | break; | 241 | break; |
242 | } | ||
243 | case LSM_AUDIT_DATA_DENTRY: { | ||
244 | struct inode *inode; | ||
245 | |||
246 | audit_log_format(ab, " name="); | ||
247 | audit_log_untrustedstring(ab, a->u.dentry->d_name.name); | ||
248 | |||
249 | inode = a->u.dentry->d_inode; | ||
250 | if (inode) | ||
251 | audit_log_format(ab, " dev=%s ino=%lu", | ||
252 | inode->i_sb->s_id, | ||
253 | inode->i_ino); | ||
254 | break; | ||
255 | } | ||
256 | case LSM_AUDIT_DATA_INODE: { | ||
257 | struct dentry *dentry; | ||
258 | struct inode *inode; | ||
259 | |||
260 | inode = a->u.inode; | ||
261 | dentry = d_find_alias(inode); | ||
262 | if (dentry) { | ||
263 | audit_log_format(ab, " name="); | ||
264 | audit_log_untrustedstring(ab, | ||
265 | dentry->d_name.name); | ||
266 | dput(dentry); | ||
267 | } | ||
268 | audit_log_format(ab, " dev=%s ino=%lu", inode->i_sb->s_id, | ||
269 | inode->i_ino); | ||
270 | break; | ||
271 | } | ||
259 | case LSM_AUDIT_DATA_TASK: | 272 | case LSM_AUDIT_DATA_TASK: |
260 | tsk = a->u.tsk; | 273 | tsk = a->u.tsk; |
261 | if (tsk && tsk->pid) { | 274 | if (tsk && tsk->pid) { |