diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2007-07-19 04:48:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-19 13:04:45 -0400 |
commit | bdf4c48af20a3b0f01671799ace345e3d49576da (patch) | |
tree | 7c3b903d2de1cba6e212ad6f347bc8742b08035a /kernel/sysctl.c | |
parent | b111757c50ee30dad162192df6168e270a90c252 (diff) |
audit: rework execve audit
The purpose of audit_bprm() is to log the argv array to a userspace daemon at
the end of the execve system call. Since user-space hasn't had time to run,
this array is still in pristine state on the process' stack; so no need to
copy it, we can just grab it from there.
In order to minimize the damage to audit_log_*() copy each string into a
temporary kernel buffer first.
Currently the audit code requires that the full argument vector fits in a
single packet. So currently it does clip the argv size to a (sysctl) limit,
but only when execve auditing is enabled.
If the audit protocol gets extended to allow for multiple packets this check
can be removed.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ollie Wild <aaw@google.com>
Cc: <linux-audit@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/sysctl.c')
-rw-r--r-- | kernel/sysctl.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 3ed4912bf183..8db41764e2a1 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -78,6 +78,7 @@ extern int percpu_pagelist_fraction; | |||
78 | extern int compat_log; | 78 | extern int compat_log; |
79 | extern int maps_protect; | 79 | extern int maps_protect; |
80 | extern int sysctl_stat_interval; | 80 | extern int sysctl_stat_interval; |
81 | extern int audit_argv_kb; | ||
81 | 82 | ||
82 | /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ | 83 | /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ |
83 | static int maxolduid = 65535; | 84 | static int maxolduid = 65535; |
@@ -306,6 +307,16 @@ static ctl_table kern_table[] = { | |||
306 | .mode = 0644, | 307 | .mode = 0644, |
307 | .proc_handler = &proc_dointvec, | 308 | .proc_handler = &proc_dointvec, |
308 | }, | 309 | }, |
310 | #ifdef CONFIG_AUDITSYSCALL | ||
311 | { | ||
312 | .ctl_name = CTL_UNNUMBERED, | ||
313 | .procname = "audit_argv_kb", | ||
314 | .data = &audit_argv_kb, | ||
315 | .maxlen = sizeof(int), | ||
316 | .mode = 0644, | ||
317 | .proc_handler = &proc_dointvec, | ||
318 | }, | ||
319 | #endif | ||
309 | { | 320 | { |
310 | .ctl_name = KERN_CORE_PATTERN, | 321 | .ctl_name = KERN_CORE_PATTERN, |
311 | .procname = "core_pattern", | 322 | .procname = "core_pattern", |