[Mono-dev] Bad usage of GCHandleType.Pinned

Rodrigo Kumpera rokumper at microsoft.com
Thu Nov 10 16:56:09 UTC 2016

Hey guys,

It came to my attention that mono is a bit more liberal in what objects it allows a pinned gc handle to be created. Dotnet only allows pinned handles to blitable types as it doesn't expose unprotected heap pointers to unsafe code.

There's a PR[1] fixing this but I'm wary on merging it before addressing this issue on, at least, the Xamarin platform.

I've identified problems in Macios[2] and WebSharp[3] (tons more on websharp).

Additionally, I identified a lot of code in both macios and android that would lead to heap corruption if

misused [4].

My suggestion is that we address issues like [2] and [3] as [4] is fine for correct usage of the code.



[1] https://github.com/mono/mono/pull/3929

[2] https://github.com/xamarin/xamarin-macios/blob/fc55e4306f79491fd269ca2495c6a859799cb1c6/src/CoreMedia/CMCustomBlockAllocator.cs#L24

[3] https://github.com/xamarin/WebSharp/blob/4df0770f7fd166155be785d4dbdf368ffd2f8466/PepperSharp/src/CompletionCallback.cs#L30

[4] https://github.com/xamarin/xamarin-macios/blob/fc55e4306f79491fd269ca2495c6a859799cb1c6/src/Metal/MTLDevice.cs#L48


Enforce restrictions on pinned GCHandle objects by joshpeterson · Pull Request #3929 · mono/mono<https://github.com/mono/mono/pull/3929>
A pinned GCHandle should not be allowed for some types. The GCHandle.Alloc method should throw an ArgumentException in these cases. This change corrects bug https://bugzilla.xamarin.com/show_bug.cg...

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dot.net/pipermail/mono-devel-list/attachments/20161110/c2f4cfea/attachment.html>

More information about the Mono-devel-list mailing list