On Tue, 1 Aug 2023 17:48:30 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

>> test/hotspot/jtreg/serviceability/HeapDump/IntegrityHeapDumpTest.java line 
>> 84:
>> 
>>> 82:                 .addToolArg(heapDumpFile.getAbsolutePath());
>>> 83: 
>>> 84:         ProcessBuilder processBuilder = new 
>>> ProcessBuilder(launcher.getCommand());
>> 
>> Can you explain this change? This will result in the test not being run with 
>> sudo in cases where sudo is necessary. Before we get here we already checked 
>> if we need sudo (not running as root) and verified that passwordless sudo is 
>> supported. Otherwise the test is skipped and would never get here. So if 
>> sudo is required, the test will fail to attach to the debuggee. Note you 
>> might not see this issue if you have DevSecurityMode enabled. See 
>> [JDK-8313357](https://bugs.openjdk.org/browse/JDK-8313357)
>
> I see now that this is a new test, and not an SA test, so probably should 
> never have been using SATestUtils in the first place (I'm curious as to how 
> that ended up happening). You should also remove the import of SATestUtils.

> Can you explain this change? This will result in the test not being run with 
> sudo in cases where sudo is necessary. Before we get here we already checked 
> if we need sudo (not running as root) and verified that passwordless sudo is 
> supported. Otherwise the test is skipped and would never get here. So if sudo 
> is required, the test will fail to attach to the debuggee. Note you might not 
> see this issue if you have DevSecurityMode enabled. See 
> [JDK-8313357](https://bugs.openjdk.org/browse/JDK-8313357)

I followed what DuplicateArrayClassesTest.java. The reason seems that 
`SATestUtils.createProcessBuilder` does not touch any verification of whether 
passwordless sudo is supported, we need to use SATestUtils.skipIfCannotAttach 
explicitly.


public class SATestUtils {
    public static ProcessBuilder createProcessBuilder(JDKToolLauncher launcher) 
{
        List<String> cmdStringList = Arrays.asList(launcher.getCommand());
        if (needsPrivileges()) {
            cmdStringList = addPrivileges(cmdStringList);
        }
        return new ProcessBuilder(cmdStringList);
    }
    public static boolean needsPrivileges() {
        return Platform.isOSX() && !Platform.isRoot();
    }
    private static List<String> addPrivileges(List<String> cmdStringList) {
        if (!Platform.isOSX()) {
            throw new RuntimeException("Can only add privileges on OSX.");
        }

        System.out.println("Adding 'sudo -E -n' to the command.");
        List<String> outStringList = new ArrayList<String>();
        outStringList.add("sudo");
        outStringList.add("-E"); // Preserve existing environment variables.
        outStringList.add("-n"); // non-interactive. Don't prompt for password. 
Must be cached or not required.
        outStringList.addAll(cmdStringList);
        return outStringList;
    }


All occurrences of skipIfCannotAttach are currently under 
`test/hotspot/jtreg/serviceability/sa or jhsdb`

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13667#discussion_r1281477905

Reply via email to