diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-12 15:38:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-04-12 15:38:53 -0400 |
commit | 0b747172dce6e0905ab173afbaffebb7a11d89bd (patch) | |
tree | cef4092aa49bd44d4759b58762bfa221dac45f57 /mm | |
parent | b7e70ca9c7d7f049bba8047d7ab49966fd5e9e9d (diff) | |
parent | 312103d64d0fcadb332899a2c84b357ddb18f4e3 (diff) |
Merge git://git.infradead.org/users/eparis/audit
Pull audit updates from Eric Paris.
* git://git.infradead.org/users/eparis/audit: (28 commits)
AUDIT: make audit_is_compat depend on CONFIG_AUDIT_COMPAT_GENERIC
audit: renumber AUDIT_FEATURE_CHANGE into the 1300 range
audit: do not cast audit_rule_data pointers pointlesly
AUDIT: Allow login in non-init namespaces
audit: define audit_is_compat in kernel internal header
kernel: Use RCU_INIT_POINTER(x, NULL) in audit.c
sched: declare pid_alive as inline
audit: use uapi/linux/audit.h for AUDIT_ARCH declarations
syscall_get_arch: remove useless function arguments
audit: remove stray newline from audit_log_execve_info() audit_panic() call
audit: remove stray newlines from audit_log_lost messages
audit: include subject in login records
audit: remove superfluous new- prefix in AUDIT_LOGIN messages
audit: allow user processes to log from another PID namespace
audit: anchor all pid references in the initial pid namespace
audit: convert PPIDs to the inital PID namespace.
pid: get pid_t ppid of task in init_pid_ns
audit: rename the misleading audit_get_context() to audit_take_context()
audit: Add generic compat syscall support
audit: Add CONFIG_HAVE_ARCH_AUDITSYSCALL
...
Diffstat (limited to 'mm')
-rw-r--r-- | mm/util.c | 48 |
1 files changed, 48 insertions, 0 deletions
@@ -446,6 +446,54 @@ unsigned long vm_commit_limit(void) | |||
446 | return allowed; | 446 | return allowed; |
447 | } | 447 | } |
448 | 448 | ||
449 | /** | ||
450 | * get_cmdline() - copy the cmdline value to a buffer. | ||
451 | * @task: the task whose cmdline value to copy. | ||
452 | * @buffer: the buffer to copy to. | ||
453 | * @buflen: the length of the buffer. Larger cmdline values are truncated | ||
454 | * to this length. | ||
455 | * Returns the size of the cmdline field copied. Note that the copy does | ||
456 | * not guarantee an ending NULL byte. | ||
457 | */ | ||
458 | int get_cmdline(struct task_struct *task, char *buffer, int buflen) | ||
459 | { | ||
460 | int res = 0; | ||
461 | unsigned int len; | ||
462 | struct mm_struct *mm = get_task_mm(task); | ||
463 | if (!mm) | ||
464 | goto out; | ||
465 | if (!mm->arg_end) | ||
466 | goto out_mm; /* Shh! No looking before we're done */ | ||
467 | |||
468 | len = mm->arg_end - mm->arg_start; | ||
469 | |||
470 | if (len > buflen) | ||
471 | len = buflen; | ||
472 | |||
473 | res = access_process_vm(task, mm->arg_start, buffer, len, 0); | ||
474 | |||
475 | /* | ||
476 | * If the nul at the end of args has been overwritten, then | ||
477 | * assume application is using setproctitle(3). | ||
478 | */ | ||
479 | if (res > 0 && buffer[res-1] != '\0' && len < buflen) { | ||
480 | len = strnlen(buffer, res); | ||
481 | if (len < res) { | ||
482 | res = len; | ||
483 | } else { | ||
484 | len = mm->env_end - mm->env_start; | ||
485 | if (len > buflen - res) | ||
486 | len = buflen - res; | ||
487 | res += access_process_vm(task, mm->env_start, | ||
488 | buffer+res, len, 0); | ||
489 | res = strnlen(buffer, res); | ||
490 | } | ||
491 | } | ||
492 | out_mm: | ||
493 | mmput(mm); | ||
494 | out: | ||
495 | return res; | ||
496 | } | ||
449 | 497 | ||
450 | /* Tracepoints definitions. */ | 498 | /* Tracepoints definitions. */ |
451 | EXPORT_TRACEPOINT_SYMBOL(kmalloc); | 499 | EXPORT_TRACEPOINT_SYMBOL(kmalloc); |