fix abuses of ptrdiff_t
authorAl Viro <viro@ftp.linux.org.uk>
Mon, 29 Oct 2007 05:11:28 +0000 (05:11 +0000)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 29 Oct 2007 14:41:33 +0000 (07:41 -0700)
commit142956af525002c5378e7d91d81a01189841a785
treebcf73cc0e2d56d8d46d470fcedaadf42ae0602bd
parent0c7eb2eb800c4afb2205bbaa1bc633eb29082fef
fix abuses of ptrdiff_t

Use of ptrdiff_t in places like

-                       if (!access_ok(VERIFY_WRITE, u_tmp->rx_buf, u_tmp->len))
+                       if (!access_ok(VERIFY_WRITE, (u8 __user *)
+                                               (ptrdiff_t) u_tmp->rx_buf,
+                                               u_tmp->len))

is wrong; for one thing, it's a bad C (it's what uintptr_t is for; in general
we are not even promised that ptrdiff_t is large enough to hold a pointer,
just enough to hold a difference between two pointers within the same object).
For another, it confuses the fsck out of sparse.

Use unsigned long or uintptr_t instead.  There are several places misusing
ptrdiff_t; fixed.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/scsi/aacraid/commctrl.c
drivers/scsi/aacraid/comminit.c
drivers/scsi/aacraid/dpcsup.c
drivers/spi/spidev.c
include/linux/types.h