diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2020-10-24 14:39:17 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2020-10-24 14:39:17 +0000 |
commit | 275c821d3ddab9571c7532c68eb4007dbdea39cf (patch) | |
tree | 0081bfaba16bd708d6c7608d0795a8d749e9ac4f /sys/kern/kern_exec.c | |
parent | b3be0b4d0c42575c8d02901ce821382e67587304 (diff) | |
download | src-275c821d3ddab9571c7532c68eb4007dbdea39cf.tar.gz src-275c821d3ddab9571c7532c68eb4007dbdea39cf.zip |
audit: correct reporting of *execve(2) success
r326145 corrected do_execve() to return EJUSTRETURN upon success so that
important registers are not clobbered. This had the side effect of tapping
out 'failures' for all *execve(2) audit records, which is less than useful
for auditing purposes.
Audit exec returns earlier, where we can know for sure that EJUSTRETURN
translates to success. Note that this unsets TDP_AUDITREC as we commit the
audit record, so the usual audit in the syscall return path will do nothing.
PR: 249179
Reported by: Eirik Oeverby <ltning-freebsd anduin net>
Reviewed by: csjp, kib
MFC after: 1 week
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D26922
Notes
Notes:
svn path=/head/; revision=367002
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r-- | sys/kern/kern_exec.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index c6c2f058a714..d4452fe2a401 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -225,6 +225,7 @@ sys_execve(struct thread *td, struct execve_args *uap) if (error == 0) error = kern_execve(td, &args, NULL, oldvmspace); post_execve(td, error, oldvmspace); + AUDIT_SYSCALL_EXIT(error == EJUSTRETURN ? 0 : error, td); return (error); } @@ -252,6 +253,7 @@ sys_fexecve(struct thread *td, struct fexecve_args *uap) error = kern_execve(td, &args, NULL, oldvmspace); } post_execve(td, error, oldvmspace); + AUDIT_SYSCALL_EXIT(error == EJUSTRETURN ? 0 : error, td); return (error); } @@ -280,6 +282,7 @@ sys___mac_execve(struct thread *td, struct __mac_execve_args *uap) if (error == 0) error = kern_execve(td, &args, uap->mac_p, oldvmspace); post_execve(td, error, oldvmspace); + AUDIT_SYSCALL_EXIT(error == EJUSTRETURN ? 0 : error, td); return (error); #else return (ENOSYS); |