PING: RFR: 8236489: Java heap file on daxfs should be more secure
David Holmes
david.holmes at oracle.com
Mon Jan 6 07:22:47 UTC 2020
Hi Yasumasa,
On 6/01/2020 2:13 pm, Yasumasa Suenaga wrote:
> Please review. I need one more reviewer to push.
>
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8236489
>>> webrev: http://cr.openjdk.java.net/~ysuenaga/JDK-8236489/webrev.00/
So you are expecting that if you build on a newer linux and run on an
older pre-3.11 version then this code:
194 fd = os::open(dir, O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR);
will set fd to -1. But I can't see any documented guarantee that will be
the case. It will depend how extensively open examines the flags
argument for unexpected values. If the flag is simply ignored then you
will successfully open thew directory - no?
This also looks suspect:
67 #ifndef O_TMPFILE
68 #ifdef __O_TMPFILE
69 #define O_TMPFILE __O_TMPFILE
70 #endif
71 #endif
when would we have __O_TMPFILE but not O_TMPFILE? The definition on
Linux itself is:
#ifndef __O_TMPFILE
#define __O_TMPFILE 020000000
#endif
/* a horrid kludge trying to make sure that this will fail on old kernels */
#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
I think if we don't have O_TMPFILE that should be the end of it.
( I also don't like contaminating os_posix.cpp with non-POSIX
functionality. :( )
Thanks,
David
-----
>
> Yasumasa
>
>
> On 2020/01/03 10:53, Yasumasa Suenaga wrote:
>> PING: Could you review it?
>>
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8236489
>>> webrev: http://cr.openjdk.java.net/~ysuenaga/JDK-8236489/webrev.00/
>>
>>
>> Yasumasa
>>
>>
>> On 2019/12/26 11:50, Yasumasa Suenaga wrote:
>>> Hi all,
>>>
>>> I filed this to JBS. Could you review?
>>>
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8236489
>>> webrev: http://cr.openjdk.java.net/~ysuenaga/JDK-8236489/webrev.00/
>>>
>>> It has passed all tests on submit repo.
>>> (mach5-one-ysuenaga-JDK-8236489-20191226-0145-7795073)
>>>
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
>>>
>>> On 2019/12/19 14:58, Yasumasa Suenaga wrote:
>>>> Hi all,
>>>>
>>>> HotSpot allocates Java heap on daxfs if we pass -XX:AllocateHeapAt.
>>>> It performs open(2) and unlink(2) on daxfs, and it is used via
>>>> mmap'ed address.
>>>>
>>>> mmap(2) would be called with MAP_SHARED, and it is not atomically
>>>> between open(2) and unlink(2). If malicious user open Java heap file
>>>> before unlink(2), it might be exposed.
>>>>
>>>> So I think we can use open(2) with O_TMPFILE instead of mkstemp(3)
>>>> as below.
>>>>
>>>> http://cr.openjdk.java.net/~ysuenaga/dax/
>>>>
>>>> O_TMPFILE would create inode on filesystem, and it cannot be
>>>> accessed from out-of-process.
>>>> However it cannot be provided in older Linux kernel. So I keep
>>>> current code as fall back.
>>>>
>>>> http://man7.org/linux/man-pages/man2/open.2.html
>>>>
>>>> What do you think about it? or someone is working for it?
>>>> If it is ok, I will file it to JBS and will send review request.
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Yasumasa
>>>>
>>>>
>>>> P.S.
>>>> I tried to use MAP_PRIVATE for it, but it was slower than
>>>> MAP_SHARED.
More information about the hotspot-runtime-dev
mailing list