2003-07-28 00:42:09

by Alan

[permalink] [raw]
Subject: PATCH: fix 2 byte data leak due to padding

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.6.0-test2/fs/stat.c linux-2.6.0-test2-ac1/fs/stat.c
--- linux-2.6.0-test2/fs/stat.c 2003-07-14 14:11:56.000000000 +0100
+++ linux-2.6.0-test2-ac1/fs/stat.c 2003-07-23 16:27:42.000000000 +0100
@@ -106,7 +106,7 @@
{
static int warncount = 5;
struct __old_kernel_stat tmp;
-
+
if (warncount > 0) {
warncount--;
printk(KERN_WARNING "VFS: Warning: %s using old stat() call. Recompile your binary.\n",
@@ -116,6 +116,7 @@
warncount = 0;
}

+ memset(&tmp, 0, sizeof(struct __old_kernel_stat));
tmp.st_dev = stat->dev;
tmp.st_ino = stat->ino;
tmp.st_mode = stat->mode;


2003-07-28 03:34:11

by Lou Langholtz

[permalink] [raw]
Subject: Re: PATCH: fix 2 byte data leak due to padding

Alan Cox wrote:

>diff -u --new-file --recursive --exclude-from /usr/src/exclude linux-2.6.0-test2/fs/stat.c linux-2.6.0-test2-ac1/fs/stat.c
>--- linux-2.6.0-test2/fs/stat.c 2003-07-14 14:11:56.000000000 +0100
>+++ linux-2.6.0-test2-ac1/fs/stat.c 2003-07-23 16:27:42.000000000 +0100
>@@ -106,7 +106,7 @@
> {
> static int warncount = 5;
> struct __old_kernel_stat tmp;
>-
>+
> if (warncount > 0) {
> warncount--;
> printk(KERN_WARNING "VFS: Warning: %s using old stat() call. Recompile your binary.\n",
>@@ -116,6 +116,7 @@
> warncount = 0;
> }
>
>+ memset(&tmp, 0, sizeof(struct __old_kernel_stat));
>
Wouldn't it be more clear (better) to use sizeof(tmp) here rather than
sizeof(struct _old_kernel_stat)?

2003-07-28 11:21:42

by Alan

[permalink] [raw]
Subject: Re: PATCH: fix 2 byte data leak due to padding

On Llu, 2003-07-28 at 04:49, Lou Langholtz wrote:
> >+ memset(&tmp, 0, sizeof(struct __old_kernel_stat));
> >
> Wouldn't it be more clear (better) to use sizeof(tmp) here rather than
> sizeof(struct _old_kernel_stat)?

sizeof(variable) can be suprising some times so I always use sizeof(type) out
of habit. (Think sizeof(x) when X later becomes a pointer)

2003-07-28 11:31:23

by Wichert Akkerman

[permalink] [raw]
Subject: Re: PATCH: fix 2 byte data leak due to padding

Previously Alan Cox wrote:
> sizeof(variable) can be suprising some times so I always use sizeof(type) out
> of habit. (Think sizeof(x) when X later becomes a pointer)

when X becomes a pointer and you use sizeof(type of what X points to)
you'll be in trouble anyway.

Wichert.

--
Wichert Akkerman <[email protected]> It is simple to make things.
http://www.wiggy.net/ It is hard to make things simple.

2003-07-28 20:06:41

by Andrew Morton

[permalink] [raw]
Subject: Re: PATCH: fix 2 byte data leak due to padding

Alan Cox <[email protected]> wrote:
>
> On Llu, 2003-07-28 at 04:49, Lou Langholtz wrote:
> > >+ memset(&tmp, 0, sizeof(struct __old_kernel_stat));
> > >
> > Wouldn't it be more clear (better) to use sizeof(tmp) here rather than
> > sizeof(struct _old_kernel_stat)?
>
> sizeof(variable) can be suprising some times so I always use sizeof(type) out
> of habit. (Think sizeof(x) when X later becomes a pointer)

#define memzero(addr) memset(addr, 0, sizeof(*addr))

would robustify a lot of these things...