usermem: Fix accidentally 16bitisms
authorAlan Cox <alan@linux.intel.com>
Wed, 13 Mar 2019 20:48:55 +0000 (20:48 +0000)
committerAlan Cox <alan@linux.intel.com>
Wed, 13 Mar 2019 20:48:55 +0000 (20:48 +0000)
In some 32bit cases we use the generic valaddr(). Thus we shouldn't cast things
to 16bit or hardcode 0xFFFF. Fix these.

Kernel/cpu-6502/cpu.h
Kernel/cpu-65c816/cpu.h
Kernel/cpu-68000/cpu.h
Kernel/cpu-6809/cpu.h
Kernel/cpu-68hc11/cpu.h
Kernel/cpu-8080/cpu.h
Kernel/cpu-msp430x/cpu.h
Kernel/cpu-pdp11/cpu.h
Kernel/cpu-r2k/cpu.h
Kernel/cpu-z80/cpu.h
Kernel/usermem.c

index fffd373..d22d8e3 100644 (file)
@@ -19,6 +19,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;
 typedef uint16_t uptr_t;               /* User pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index 53e3999..e8e58e1 100644 (file)
@@ -33,6 +33,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;
 typedef uint16_t uptr_t;               /* User pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index 08f4f3a..0ed0416 100644 (file)
@@ -20,6 +20,7 @@ typedef int32_t ssize_t;
 typedef uint32_t uaddr_t;
 typedef uint32_t uptr_t;               /* User pointer equivalent */
 
+#define MAXUSIZE       0xFFFFFFFF
 
 #define uputp  uputl                   /* Copy user pointer type */
 #define ugetp  ugetl                   /* between user and kernel */
index bd1b7cc..4587bf1 100644 (file)
@@ -20,6 +20,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;              /* A user address must fit this */
 typedef uint16_t uptr_t;               /* User pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index 808b307..ab4e2b2 100644 (file)
@@ -19,6 +19,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;              /* A user address must fit this */
 typedef uint16_t uptr_t;               /* User pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index c8032cf..85759bd 100644 (file)
@@ -18,6 +18,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;              /* User address */
 typedef uint16_t uptr_t;               /* Userspace pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index 8b3b609..af66ac1 100644 (file)
@@ -24,6 +24,8 @@ typedef uint16_t usize_t;             /* Largest value passed by userspace */
 typedef int16_t susize_t;
 typedef uint32_t clock_t;
 
+#define MAXUSIZE       0xFFFF
+
 /* The MSP430 requires aligned accesses. (Annoying, it doesn't trap if you
  * get this wrong. It just reads to or writes from the wrong place.) */
 
index 80626f1..db22602 100644 (file)
@@ -19,6 +19,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;              /* A user address must fit this */
 typedef uint16_t uptr_t;               /* User pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index 2117eb0..faf41a2 100644 (file)
@@ -18,6 +18,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;              /* User address */
 typedef uint16_t uptr_t;               /* Userspace pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index 419a48a..8db8b23 100644 (file)
@@ -18,6 +18,8 @@ typedef int16_t susize_t;
 typedef uint16_t uaddr_t;              /* User address */
 typedef uint16_t uptr_t;               /* Userspace pointer equivalent */
 
+#define MAXUSIZE       0xFFFF
+
 #define uputp  uputw                   /* Copy user pointer type */
 #define ugetp  ugetw                   /* between user and kernel */
 #define uputi  uputw                   /* Copy user int type */
index ab5e361..a74b433 100644 (file)
@@ -17,7 +17,7 @@
 usize_t valaddr(const uint8_t *base, usize_t size)
 {
        if (base + size < base)
-               size = 0xFFFF - (uint16_t)base + 1;
+               size = MAXUSIZE - (usize_t)base + 1;
        if (!base || base < (const uint8_t *)PROGBASE ||
                base > (const uint8_t *)(size_t)udata.u_top)
                size = 0;