[foreign] RFR 8217414: Remove bounds check in BoundedPointer constructor
Jorn Vernee
jbvernee at xs4all.nl
Mon Jan 21 14:29:44 UTC 2019
Updated webrev:
http://cr.openjdk.java.net/~jvernee/panama/webrevs/8217414/webrev.01
I ended up not adding the check for Callbacks since AFAICT there is
currently no public API to create a Callback with an OOB pointer. Should
I add the check any ways?
Jorn
Jorn Vernee schreef op 2019-01-21 14:54:
> Ok, I see your point. Plus, if a user finds the API too restrictive
> they could always fall back on native allocation APIs like malloc &
> free, or possibly custom LayoutTypes when those are introduced.
>
> I think it will be sufficient to move the check to
> `References.OfPointer` and `References.OfCallback`. But I will add
> some tests to make sure as well.
>
> Jorn
>
> Maurizio Cimadamore schreef op 2019-01-21 14:42:
>> On 21/01/2019 13:12, Jorn Vernee wrote:
>>> There is a `checkAlive()` that gets called when a pointer is unboxed
>>> [1], I thought you were talking about that check. But, I don't think
>>> we should do a bounds check before passing a pointer to native code.
>>> The "one past the end of a container" pointer idiom is common and
>>> some APIs might expect to be passed such a pointer. It seems too
>>> restrictive to require that pointers passed to native code have to be
>>> in bounds (tbh I have my doubts about the liveliness check as well).
>>
>> The whole point of the Panama API is to provide enriched safety. Now,
>> if users want to opt out of that, we might (in the future) provide
>> knobs to do so, but I see no point for passing a pointer that is not
>> alive around (given it is known to contain garbage). Similarly, I see
>> very little point in passing a pointer that is out of bounds - granted
>> there might be few use cases for that (e.g. pass a 'limit' pointer to
>> a library), but I'd prefer to stick with stricter semantics and loosen
>> that up on a use case by use case basis.
>>
>> I think the main point of this patch should be to _delay_ the check
>> that is currently done on the constructor, not to remove it
>> completely. It is ok if some piece of code temporarily produces an out
>> of bound pointers (e.g. when iterating), but I think we should limit
>> the exposure of that weird pointer to the rest of the machinery.
>>
>> Maurizio
>>
>>>
>>> Jorn
>>>
>>> [1] :
>>> http://hg.openjdk.java.net/panama/dev/file/tip/src/java.base/share/classes/jdk/internal/foreign/memory/BoundedPointer.java#l75
>>>
>>> Maurizio Cimadamore schreef op 2019-01-21 13:56:
>>>> I agree that the check should removed from the constructor - but we
>>>> should make sure that checks happen when the pointer is used.
>>>> Dereference is one situation, function call is another. I guess
>>>> dereference is already covered (after all, a memory read will fail
>>>> if
>>>> outside the boundaries), but I don't think passing an out of bound
>>>> pointer to a function is currently being checked, and it should if
>>>> we
>>>> remove the constructor eager check
>>>>
>>>> Maurizio
>>>>
>>>> On 21/01/2019 12:00, Jorn Vernee wrote:
>>>>> Hi,
>>>>>
>>>>> I have a patch addressing 2 vacuously passing tests
>>>>> (api/PointerTest and api/ArrayTest). The patch fixes the tests, and
>>>>> to make that happen removes the bounds check in BoundedPointer's
>>>>> constructor. As discussed offline; this check is not needed since
>>>>> we already de a check when dereferencing a pointer in
>>>>> BoundedMemoryRegion, and the check in the constructor is overly
>>>>> restrictive since it should be fine to create out-of-bounds
>>>>> pointers as long as it is not dereferenced. This does mean the
>>>>> tests needed to be tweaked since now an access exception is throw
>>>>> at a later point.
>>>>>
>>>>> Please review the following.
>>>>>
>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8217414
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/8217414/webrev.00
>>>>>
>>>>> Thanks,
>>>>> Jorn
More information about the panama-dev
mailing list