On Wed, 24 May 2023 23:48:52 GMT, Serguei Spitsyn <[email protected]> wrote:
>> Code that parses /proc/self/stat may be broken if the executable name >> contains spaces. >> >> We have code that does this correctly, and code that does not. >> UnixOperatingSystem.c is Linux-specific OS code, and has vread_statdata >> which correctly uses strrchr to find the last ) and parses from there. >> >> OperatingSystemImpl.c the generic, not Linux-specific code, is not OK, as >> Java_com_sun_management_internal_OperatingSystemImpl_getCommittedVirtualMemorySize0 >> has a problematic fscanf call. >> But the problematic fscanf call is Linux-specific: we use ifdef to create >> OS-specific implementations. >> >> >> Need to change the fscanf of /proc/self/stat to do the same buffered read as >> read_ticks in UnixOperatingSystem.c (the Linux-specific code), with strrchr >> to read past the ) of the execname. >> >> Moving the actually-Linux-specific getCommittedVirtualMemorySize0 to be with >> the other Linux-specific code means it can just use the existing method for >> accessing /proc/self/stat. >> >> It does however call throw_internal_error, which is then not accessible. So >> that function can be shared in the libmanagement_ext.h/.c for both uses. >> >> The call to throw_internal_error is working: if I change the code to fail, >> it reports a java.lang.InternalError as it would before. >> >> Existing tests still pass: >> i.e. >> test/jdk/com/sun/management/OperatingSystemMXBean/GetCommittedVirtualMemorySize.java > > Thank you for explanation! Looks good. Thanks @sspitsyn and @alexmenkov for the reviews! ------------- PR Comment: https://git.openjdk.org/jdk/pull/14107#issuecomment-1564203867
