2005-01-07 01:28:10

by Jesper Juhl

[permalink] [raw]
Subject: [PATCH][3/4] let's kill verify_area - convert kernel/compat.c to access_ok()


Here's a patch to convert verify_area to access_ok in kernel/compat.c

diff -up linux-2.6.10-bk9-orig/kernel/compat.c linux-2.6.10-bk9/kernel/compat.c
--- linux-2.6.10-bk9-orig/kernel/compat.c 2005-01-06 22:19:13.000000000 +0100
+++ linux-2.6.10-bk9/kernel/compat.c 2005-01-07 02:06:00.000000000 +0100
@@ -26,16 +26,16 @@

int get_compat_timespec(struct timespec *ts, const struct compat_timespec __user *cts)
{
- return (verify_area(VERIFY_READ, cts, sizeof(*cts)) ||
+ return (access_ok(VERIFY_READ, cts, sizeof(*cts)) ||
__get_user(ts->tv_sec, &cts->tv_sec) ||
- __get_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0;
+ __get_user(ts->tv_nsec, &cts->tv_nsec)) ? 0 : -EFAULT;
}

int put_compat_timespec(const struct timespec *ts, struct compat_timespec __user *cts)
{
- return (verify_area(VERIFY_WRITE, cts, sizeof(*cts)) ||
+ return (access_ok(VERIFY_WRITE, cts, sizeof(*cts)) ||
__put_user(ts->tv_sec, &cts->tv_sec) ||
- __put_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0;
+ __put_user(ts->tv_nsec, &cts->tv_nsec)) ? 0 : EFAULT;
}

static long compat_nanosleep_restart(struct restart_block *restart)
@@ -612,7 +612,7 @@ long compat_get_bitmap(unsigned long *ma
/* align bitmap up to nearest compat_long_t boundary */
bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);

- if (verify_area(VERIFY_READ, umask, bitmap_size / 8))
+ if (!access_ok(VERIFY_READ, umask, bitmap_size / 8) != 0)
return -EFAULT;

nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);
@@ -653,7 +653,7 @@ long compat_put_bitmap(compat_ulong_t __
/* align bitmap up to nearest compat_long_t boundary */
bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);

- if (verify_area(VERIFY_WRITE, umask, bitmap_size / 8))
+ if (!access_ok(VERIFY_WRITE, umask, bitmap_size / 8) != 0)
return -EFAULT;

nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);




2005-01-07 01:59:38

by Andries Brouwer

[permalink] [raw]
Subject: Re: [PATCH][3/4] let's kill verify_area - convert kernel/compat.c to access_ok()

On Fri, Jan 07, 2005 at 02:18:44AM +0100, Jesper Juhl wrote:

> Here's a patch to convert verify_area to access_ok in kernel/compat.c
>
> diff -up linux-2.6.10-bk9-orig/kernel/compat.c linux-2.6.10-bk9/kernel/compat.c
> --- linux-2.6.10-bk9-orig/kernel/compat.c 2005-01-06 22:19:13.000000000 +0100
> +++ linux-2.6.10-bk9/kernel/compat.c 2005-01-07 02:06:00.000000000 +0100
> @@ -26,16 +26,16 @@
>
> int get_compat_timespec(struct timespec *ts, const struct compat_timespec __user *cts)
> {
> - return (verify_area(VERIFY_READ, cts, sizeof(*cts)) ||
> + return (access_ok(VERIFY_READ, cts, sizeof(*cts)) ||
> __get_user(ts->tv_sec, &cts->tv_sec) ||
> - __get_user(ts->tv_nsec, &cts->tv_nsec)) ? -EFAULT : 0;
> + __get_user(ts->tv_nsec, &cts->tv_nsec)) ? 0 : -EFAULT;
> }

This is not an equivalent transformation.

2005-01-07 10:02:50

by Peter Kjellerstedt

[permalink] [raw]
Subject: RE: [PATCH][3/4] let's kill verify_area - convert kernel/compat.c to access_ok()

> -----Original Message-----
> From: [email protected]
[mailto:[email protected]] On Behalf Of Jesper Juhl
> Sent: Friday, January 07, 2005 02:19
> To: linux-kernel
> Cc: Andrew Morton
> Subject: [PATCH][3/4] let's kill verify_area - convert kernel/compat.c
to access_ok()
>
> Here's a patch to convert verify_area to access_ok in kernel/compat.c
>
> diff -up linux-2.6.10-bk9-orig/kernel/compat.c
> linux-2.6.10-bk9/kernel/compat.c
> --- linux-2.6.10-bk9-orig/kernel/compat.c 2005-01-06
22:19:13.000000000 +0100
> +++ linux-2.6.10-bk9/kernel/compat.c 2005-01-07 02:06:00.000000000
+0100

[snip]

> @@ -612,7 +612,7 @@ long compat_get_bitmap(unsigned long *ma
> /* align bitmap up to nearest compat_long_t boundary */
> bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);
>
> - if (verify_area(VERIFY_READ, umask, bitmap_size / 8))
> + if (!access_ok(VERIFY_READ, umask, bitmap_size / 8) != 0)

Please do not use double negations (i.e., drop the '!= 0' test
again).

> return -EFAULT;
>
> nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);
> @@ -653,7 +653,7 @@ long compat_put_bitmap(compat_ulong_t __
> /* align bitmap up to nearest compat_long_t boundary */
> bitmap_size = ALIGN(bitmap_size, BITS_PER_COMPAT_LONG);
>
> - if (verify_area(VERIFY_WRITE, umask, bitmap_size / 8))
> + if (!access_ok(VERIFY_WRITE, umask, bitmap_size / 8) != 0)
> return -EFAULT;
>
> nr_compat_longs = BITS_TO_COMPAT_LONGS(bitmap_size);

//Peter