RFR: 8368522: (fs) BasicFileAttributes Linux musl 1.2.5 incompatibility with statx

Brian Burkhalter bpb at openjdk.org
Wed Oct 8 22:54:04 UTC 2025


On Tue, 7 Oct 2025 12:54:21 GMT, Aleksei Voitylov <avoitylov at openjdk.org> wrote:

> This cleanup replaces #ifdefs with a standard #include <stdint.h>. Using standard types is less prone to errors.
> 
> JDK-8368522 was reported on ARM32 with musl libc, which is not a supported configuration, but I still believe this code cleanup is worth it.
> 
> After the introduction of statx with musl 1.2.5, a buffer overflow issue with statx() call handling started happening on ARM32. The root cause is incorrect size of __uint64_t type definition in the JDK for musl libc, where it was defined as 4 bytes (unsigned long int) for 32-bit systems instead of 8 bytes (unsigned long long).
> 
> The mismatch between JDK's my_statx structure and kernel's statx structure causes stack corruption when statx() writes beyond the statx_buf boundaries, overwriting adjacent variables, including the 'attrs' argument that was later passed to copy_statx_attributes() function and caused a segfault there.
> 
> Built and ran jtreg on standard OpenJDK platforms with no regressions, including the altered test.

src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c line 28:

> 26: #include <stdio.h>
> 27: #include <stdlib.h>
> 28: #include <stdint.h>

Why is line 28 not also inside a `#if defined(__linux__)` conditional compilation block?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27674#discussion_r2415189272


More information about the nio-dev mailing list