On Tue, 23 May 2023 20:54:42 GMT, Kevin Walls <kev...@openjdk.org> 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

This pull request has now been integrated.

Changeset: 17ef8a44
Author:    Kevin Walls <kev...@openjdk.org>
URL:       
https://git.openjdk.org/jdk/commit/17ef8a44a90a74724508a91abda3686e5123d1cd
Stats:     61 lines in 4 files changed: 34 ins; 25 del; 2 mod

8299665: /proc/self/stat parsing in libmanagement broken by execname with spaces

Reviewed-by: sspitsyn, amenkov

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

PR: https://git.openjdk.org/jdk/pull/14107

Reply via email to