linux-next.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* linux-next: build warnings (buffer size is not provably correct)
@ 2009-10-08  4:47 Stephen Rothwell
  2009-10-08 13:42 ` Arjan van de Ven
  0 siblings, 1 reply; 2+ messages in thread
From: Stephen Rothwell @ 2009-10-08  4:47 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Peter Zijlstra
  Cc: linux-next, linux-kernel, Arjan van de Ven, James Morris,
	David Howells, Wim Van Sebroeck, Al Viro

[-- Attachment #1: Type: text/plain, Size: 1281 bytes --]

Hi all,

Today's linux-next build (i386 defconfig) produced these warnings:

In file included from arch/x86/include/asm/uaccess.h:572,
                 from kernel/capability.c:18:
arch/x86/include/asm/uaccess_32.h: In function 'sys_capset':
arch/x86/include/asm/uaccess_32.h:211: warning: call to 'copy_from_user_overflow' declared with attribute warning: copy_from_user() buffer size is not provably correct
In file included from arch/x86/include/asm/uaccess.h:572,
                 from include/linux/poll.h:14,
                 from include/linux/rtc.h:115,
                 from include/linux/mc146818rtc.h:16,
                 from drivers/char/nvram.c:108:
arch/x86/include/asm/uaccess_32.h: In function 'nvram_write':
arch/x86/include/asm/uaccess_32.h:211: warning: call to 'copy_from_user_overflow' declared with attribute warning: copy_from_user() buffer size is not provably correct

Brought to light by commit 4a3127693001c61a21d1ce680db6340623f52e93
("x86: Turn the copy_from_user check into an (optional) compile time
warning") from the tip tree.

Clearly these are not problems with the tip tree, but someone may want to
look at them.

-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: linux-next: build warnings (buffer size is not provably correct)
  2009-10-08  4:47 linux-next: build warnings (buffer size is not provably correct) Stephen Rothwell
@ 2009-10-08 13:42 ` Arjan van de Ven
  0 siblings, 0 replies; 2+ messages in thread
From: Arjan van de Ven @ 2009-10-08 13:42 UTC (permalink / raw)
  To: Stephen Rothwell
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Peter Zijlstra,
	linux-next, linux-kernel, James Morris, David Howells,
	Wim Van Sebroeck, Al Viro, akpm

On Thu, 8 Oct 2009 15:47:10 +1100
Stephen Rothwell <sfr@canb.auug.org.au> wrote:

> Hi all,
> 
> Today's linux-next build (i386 defconfig) produced these warnings:
> 
> In file included from arch/x86/include/asm/uaccess.h:572,
>                  from kernel/capability.c:18:
> arch/x86/include/asm/uaccess_32.h: In function 'sys_capset':

the following needs to go somewhere... Andrew ?

From: Arjan van de Ven <arjan@linux.intel.com>
Subject: [PATCH 7/9] Simplify bound checks in capabilities for copy_from_user
CC: James Morris <jmorris@namei.org>

The capabilities syscall has a copy_from_user() call where gcc currently
cannot prove to itself that the copy is always within bounds.

This patch adds a very explicity bound check to prove to gcc that 
this copy_from_user cannot overflow its destination buffer.

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: James Morris <jmorris@namei.org>

diff --git a/kernel/capability.c b/kernel/capability.c
index 4e17041..204f11f 100644
--- a/kernel/capability.c
+++ b/kernel/capability.c
@@ -238,7 +241,7 @@ SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr)
 SYSCALL_DEFINE2(capset, cap_user_header_t, header, const cap_user_data_t, data)
 {
 	struct __user_cap_data_struct kdata[_KERNEL_CAPABILITY_U32S];
-	unsigned i, tocopy;
+	unsigned i, tocopy, copybytes;
 	kernel_cap_t inheritable, permitted, effective;
 	struct cred *new;
 	int ret;
@@ -255,8 +258,11 @@ SYSCALL_DEFINE2(capset, cap_user_header_t, header, const cap_user_data_t, data)
 	if (pid != 0 && pid != task_pid_vnr(current))
 		return -EPERM;
 
-	if (copy_from_user(&kdata, data,
-			   tocopy * sizeof(struct __user_cap_data_struct)))
+	copybytes = tocopy * sizeof(struct __user_cap_data_struct);
+	if (copybytes > sizeof(kdata))
+		return -EFAULT;
+
+	if (copy_from_user(&kdata, data, copybytes))
 		return -EFAULT;
 
 	for (i = 0; i < tocopy; i++) {


-- 
Arjan van de Ven 	Intel Open Source Technology Centre
For development, discussion and tips for power savings, 
visit http://www.lesswatts.org

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-10-08 13:42 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-08  4:47 linux-next: build warnings (buffer size is not provably correct) Stephen Rothwell
2009-10-08 13:42 ` Arjan van de Ven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).