[3.8.y.z extended stable] Patch "audit: correct a type mismatch in audit_syscall_exit()" has been added to staging queue

Kamal Mostafa kamal at canonical.com
Fri Feb 7 21:37:06 UTC 2014


This is a note to let you know that I have just added a patch titled

    audit: correct a type mismatch in audit_syscall_exit()

to the linux-3.8.y-queue branch of the 3.8.y.z extended stable tree 
which can be found at:

 http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.8.y-queue

This patch is scheduled to be released in version 3.8.13.18.

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.8.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Kamal

------

>From 2db842716655e129b34d02b6b74db3eccc984c2d Mon Sep 17 00:00:00 2001
From: AKASHI Takahiro <takahiro.akashi at linaro.org>
Date: Mon, 13 Jan 2014 13:33:09 -0800
Subject: audit: correct a type mismatch in audit_syscall_exit()

commit 06bdadd7634551cfe8ce071fe44d0311b3033d9e upstream.

audit_syscall_exit() saves a result of regs_return_value() in intermediate
"int" variable and passes it to __audit_syscall_exit(), which expects its
second argument as a "long" value.  This will result in truncating the
value returned by a system call and making a wrong audit record.

I don't know why gcc compiler doesn't complain about this, but anyway it
causes a problem at runtime on arm64 (and probably most 64-bit archs).

Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
Cc: Al Viro <viro at zeniv.linux.org.uk>
Cc: Eric Paris <eparis at redhat.com>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
Signed-off-by: Eric Paris <eparis at redhat.com>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
---
 include/linux/audit.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/audit.h b/include/linux/audit.h
index 37464c5..385d733 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -127,7 +127,7 @@ static inline void audit_syscall_exit(void *pt_regs)
 {
 	if (unlikely(current->audit_context)) {
 		int success = is_syscall_success(pt_regs);
-		int return_code = regs_return_value(pt_regs);
+		long return_code = regs_return_value(pt_regs);

 		__audit_syscall_exit(success, return_code);
 	}
--
1.8.3.2





More information about the kernel-team mailing list