JDK 17 EA build 26 - Better debuggability of SecurityManager WARNING messages?
Jaikiran Pai
jai.forums2013 at gmail.com
Mon Jun 14 16:59:47 UTC 2021
While testing the Apache Ant project with the latest released EA of JDK
17[1] (build 26), at least one of our internal test case has started
failing. The failure relates to the new "WARNING" message that gets
printed out to System.err when some code at runtime sets the security
manager. The test case we have expects that the System.err stream
contains only specific content. However, with this change, it now finds
the expected content plus this additional warning message:
WARNING: java.lang.System::setSecurityManager is deprecated and will be
removed in a future release.
Given the way the test is written, it doesn't like the presence of this
additional content on System.err and fails.
"Fixing" this test itself is pretty trivial for us and given that it's
just one such test, I plan to just go ahead and do that tomorrow.
However, what I'm more interested in is what part of the code at runtime
is setting the security manager. I think even that part I can probably
easily narrow it down tomorrow once I look into the code. But from what
I imagine, this is going to be much more difficult to narrow down if the
security manager is being set at runtime from third party library code,
deep in the ecosystem of the deployed application (imagine some code
embedding Ant project and invoking it from their project).
I understand that the -Djava.security.manager system property allows the
values "allow" and "disallow", but additionally would it be possible to
introduce a new (optional) system property which takes a value "debug"?
When this system property is set to "debug" and the Java runtime detects
that a WARNING needs to be issued because of runtime setting of security
manager, then a stacktrace is dumped showing the call location of each
such code which is setting the security manager? This would be similar
to the --illegal-access flag (although not a system property) that had
the "debug" option, which I thought proved to be very useful when
narrowing down the reflective access calls.
[1] https://jdk.java.net/17/
-Jaikiran
More information about the security-dev
mailing list