[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Problem with NSInvocation on Windows
From: |
David Chisnall |
Subject: |
Re: Problem with NSInvocation on Windows |
Date: |
Mon, 8 Mar 2010 11:38:29 +0000 |
Hi Roland,
You forgot to attach the patch, but I'd strongly recommend against applying it
if you had. There is a very good reason why NSInvocation allocates an entire
page: we need to make the region writable when constructing the invocation and
then executable later. The VirtualProtect() call only operates on a whole
page, so if you use this with malloc()'d memory then you will be randomly
changing the permissions of other allocations.
The patch that you submitted in your second email sets execute permission on an
entire page, which is a terrible idea and is likely to turn small bugs into
trivial arbitrary code execution vulnerabilities.
If you are running out of memory as a result of NSInvocation instances being
created, then the problem is likely that they are not being deallocated
correctly.
David
On 8 Mar 2010, at 10:41, Roland Schwingel wrote:
> Hi...
>
> There is a problem using NSInvocation on windows. It always allocates a
> windows native virtual memory page for it's informations. Depending on the
> windows version such a page can be very big and the number of these pages are
> limited. If you have a lot of NSInvocation instances this fragments your
> memory and you can also run out of virtual pages when you are using ffi
> invocations.
>
> The attached (trivial) patch fixes this. It allocates pages now using malloc
> and later on adjusts the allocated memory flags using VirtualProtect().
>
> Thanks for applying,
>
> Roland
>
>
>
> _______________________________________________
> Discuss-gnustep mailing list
> Discuss-gnustep@gnu.org
> http://lists.gnu.org/mailman/listinfo/discuss-gnustep
-- Sent from my IBM 1620