summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Lopez <slp@sinrega.org>2011-09-27 15:27:55 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2011-09-28 01:18:05 +0200
commitf0108a7c6131daa0dc2d898b05d9012f1ea3f945 (patch)
treeedd434846028a9cd5faac021a29449f2fb90b46a
parent0a55db5302a78ea51a1b4e4ff3ba632f34b2f6af (diff)
fix copy out-of-line data when length >= 512MB
* ipc/ipc_kmsg.c (ipc_kmsg_copyin_body): Change length type to unsigned64_t. Cast number to unsigned64_t. (ipc_kmsg_copyout_body): Likewise.
-rw-r--r--ipc/ipc_kmsg.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
index a12c9476..c2689a48 100644
--- a/ipc/ipc_kmsg.c
+++ b/ipc/ipc_kmsg.c
@@ -1368,7 +1368,7 @@ ipc_kmsg_copyin_body(kmsg, space, map)
mach_msg_type_number_t number;
boolean_t is_inline, longform, dealloc, is_port;
vm_offset_t data;
- vm_size_t length;
+ unsigned64_t length;
kern_return_t kr;
type = (mach_msg_type_long_t *) saddr;
@@ -1419,7 +1419,7 @@ ipc_kmsg_copyin_body(kmsg, space, map)
/* calculate length of data in bytes, rounding up */
- length = ((number * size) + 7) >> 3;
+ length = (((unsigned64_t) number * size) + 7) >> 3;
if (is_inline) {
vm_size_t amount;
@@ -2382,7 +2382,7 @@ ipc_kmsg_copyout_body(saddr, eaddr, space, map)
mach_msg_type_size_t size;
mach_msg_type_number_t number;
boolean_t is_inline, longform, is_port;
- vm_size_t length;
+ unsigned64_t length;
vm_offset_t addr;
type = (mach_msg_type_long_t *) saddr;
@@ -2413,7 +2413,7 @@ ipc_kmsg_copyout_body(saddr, eaddr, space, map)
/* calculate length of data in bytes, rounding up */
- length = ((number * size) + 7) >> 3;
+ length = (((unsigned64_t) number * size) + 7) >> 3;
is_port = MACH_MSG_TYPE_PORT_ANY(name);