El Fri, 23 Sep 2011 18:28:19 -0700 "Thomas Bushnell, BSG" <t...@becket.net> escribió:
> I think the fear is of resource exhaustion, but there are so many of > those problems, this would not be the first place to look IMO. > > Thomas > > On Thu, Sep 22, 2011 at 4:29 PM, Roland McGrath > <rol...@hack.frob.com>wrote: > > > The whole point of OOL data is that it is relatively cheap to > > transfer huge quantities. So I don't think there should be any > > arbitrary limits. > > In that case, until GNU Mach is ported to 64 bits, a patch like this should be considered: * ipc/ipc_kmsg.c (ipc_kmsg_copyin_body): Change length type to unsigned64_t. Cast number to unsigned64_t. (ipc_kmsg_copyout_body): Likewise. --- ipc/ipc_kmsg.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c index a12c947..c2689a4 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); -- 1.7.6