diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-03 17:04:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-03 17:04:58 -0400 |
commit | f39d420f672f99ad9a0fe7deb951a0030d4f0d9e (patch) | |
tree | 450e229a4305362f72cc5461aab8af4f2f5d023e /security/integrity/integrity_audit.c | |
parent | fe489bf4505ae26d3c6d6a1f1d3064c2a9c5cd85 (diff) | |
parent | 572e5b018ba68d634f30aef71cf04d85c884aa05 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security
Pull security subsystem updates from James Morris:
"In this update, Smack learns to love IPv6 and to mount a filesystem
with a transmutable hierarchy (i.e. security labels are inherited
from parent directory upon creation rather than creating process).
The rest of the changes are maintenance"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (37 commits)
tpm/tpm_i2c_infineon: Remove unused header file
tpm: tpm_i2c_infinion: Don't modify i2c_client->driver
evm: audit integrity metadata failures
integrity: move integrity_audit_msg()
evm: calculate HMAC after initializing posix acl on tmpfs
maintainers: add Dmitry Kasatkin
Smack: Fix the bug smackcipso can't set CIPSO correctly
Smack: Fix possible NULL pointer dereference at smk_netlbl_mls()
Smack: Add smkfstransmute mount option
Smack: Improve access check performance
Smack: Local IPv6 port based controls
tpm: fix regression caused by section type conflict of tpm_dev_release() in ppc builds
maintainers: Remove Kent from maintainers
tpm: move TPM_DIGEST_SIZE defintion
tpm_tis: missing platform_driver_unregister() on error in init_tis()
security: clarify cap_inode_getsecctx description
apparmor: no need to delay vfree()
apparmor: fix fully qualified name parsing
apparmor: fix setprocattr arg processing for onexec
apparmor: localize getting the security context to a few macros
...
Diffstat (limited to 'security/integrity/integrity_audit.c')
-rw-r--r-- | security/integrity/integrity_audit.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/security/integrity/integrity_audit.c b/security/integrity/integrity_audit.c new file mode 100644 index 000000000000..d7efb30404aa --- /dev/null +++ b/security/integrity/integrity_audit.c | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 IBM Corporation | ||
3 | * Author: Mimi Zohar <zohar@us.ibm.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation, version 2 of the License. | ||
8 | * | ||
9 | * File: integrity_audit.c | ||
10 | * Audit calls for the integrity subsystem | ||
11 | */ | ||
12 | |||
13 | #include <linux/fs.h> | ||
14 | #include <linux/gfp.h> | ||
15 | #include <linux/audit.h> | ||
16 | #include "integrity.h" | ||
17 | |||
18 | static int integrity_audit_info; | ||
19 | |||
20 | /* ima_audit_setup - enable informational auditing messages */ | ||
21 | static int __init integrity_audit_setup(char *str) | ||
22 | { | ||
23 | unsigned long audit; | ||
24 | |||
25 | if (!strict_strtoul(str, 0, &audit)) | ||
26 | integrity_audit_info = audit ? 1 : 0; | ||
27 | return 1; | ||
28 | } | ||
29 | __setup("integrity_audit=", integrity_audit_setup); | ||
30 | |||
31 | void integrity_audit_msg(int audit_msgno, struct inode *inode, | ||
32 | const unsigned char *fname, const char *op, | ||
33 | const char *cause, int result, int audit_info) | ||
34 | { | ||
35 | struct audit_buffer *ab; | ||
36 | |||
37 | if (!integrity_audit_info && audit_info == 1) /* Skip info messages */ | ||
38 | return; | ||
39 | |||
40 | ab = audit_log_start(current->audit_context, GFP_KERNEL, audit_msgno); | ||
41 | audit_log_format(ab, "pid=%d uid=%u auid=%u ses=%u", | ||
42 | current->pid, | ||
43 | from_kuid(&init_user_ns, current_cred()->uid), | ||
44 | from_kuid(&init_user_ns, audit_get_loginuid(current)), | ||
45 | audit_get_sessionid(current)); | ||
46 | audit_log_task_context(ab); | ||
47 | audit_log_format(ab, " op="); | ||
48 | audit_log_string(ab, op); | ||
49 | audit_log_format(ab, " cause="); | ||
50 | audit_log_string(ab, cause); | ||
51 | audit_log_format(ab, " comm="); | ||
52 | audit_log_untrustedstring(ab, current->comm); | ||
53 | if (fname) { | ||
54 | audit_log_format(ab, " name="); | ||
55 | audit_log_untrustedstring(ab, fname); | ||
56 | } | ||
57 | if (inode) { | ||
58 | audit_log_format(ab, " dev="); | ||
59 | audit_log_untrustedstring(ab, inode->i_sb->s_id); | ||
60 | audit_log_format(ab, " ino=%lu", inode->i_ino); | ||
61 | } | ||
62 | audit_log_format(ab, " res=%d", !result); | ||
63 | audit_log_end(ab); | ||
64 | } | ||