RFR: 8229147: Linux os::create_thread() overcounts guardpage size with newer glibc (>=2.27)

David Holmes dholmes at openjdk.org
Sat Apr 22 00:57:11 UTC 2023


On Fri, 21 Apr 2023 13:55:02 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> We can now detect whether glibc includes the guard pages as part of the requested stack size or not, and so only need to make adjustments when glibc requires it.
>> 
>> The intent was to use a local variable as the "flag" but unfortunately it is also needed in os_posix.cpp so I had to make it part of the os::Linux API.
>> 
>> See bug report (and related) for details.
>> 
>> Testing:
>>   - Manually checked log output for stack sizes and boundaries on systems with and without the glibc fix. (Again see JBS issue)
>>   -  Tiers 1-3 sanity
>> Thanks
>
> src/hotspot/os/linux/os_linux.cpp line 842:
> 
>> 840:     // If the minimum stack size changed when we added the guard pages
>> 841:     // then we need to perform the adjustment.
>> 842:     os::Linux::AdjustStackSizeForGuardPages = (min_stack2 - min_stack > 0);
> 
> Subtracting the unsigned `size_t` is somewhat unsafe in face of underflows here. Just `min_stack2 > min_stack` solves it.

Well I guess `minstack2 != minstack` suffices in that regard, but underflow is not a consideration here surely? If the difference was more than the specified guard size (modulo rounding) then there is a more serious glibc bug here.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/13571#discussion_r1174240275


More information about the hotspot-runtime-dev mailing list