RFR: 8333344: JMX attaching of Subject does not work when security manager not allowed [v3]
Weijun Wang
weijun at openjdk.org
Tue Jun 11 17:07:16 UTC 2024
On Tue, 11 Jun 2024 16:18:23 GMT, Kevin Walls <kevinw at openjdk.org> wrote:
>> JMX uses APIs related to the Security Mananger which are deprecated. Use of AccessControlContext will be removed when Security Manager is removed.
>>
>> Until then, updates are needed to not require setting -Djava.security.manager=allow to use JMX authentication.
>
> Kevin Walls has updated the pull request incrementally with one additional commit since the last revision:
>
> Sean comments
src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java line 1301:
> 1299: }
> 1300: };
> 1301: if (acc == null) {
This is a comment to all the code changes in this PR. I would recommend we make use of the `allowSecurityManager()` call everywhere when the behavior is different, like this:
if (SharedSecrets.getJavaLangAccess().allowSecurityManager()) {
if (acc == null)
return action.run();
else
return AccessController.doPrivileged(action, acc);
} else {
if (subject == null)
return action.run();
else
return Subject.doAs(subject, action);
}
This makes me much more confident.
src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java line 1436:
> 1434: } else {
> 1435: // ACC is present, we have a Subject and SM is permitted:
> 1436: return AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> Subject.doAs(subject, op), acc);
Why is it necessary to call both `doAs` and `doPrivileged`?
src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java line 1438:
> 1436: return AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> Subject.doAs(subject, op), acc);
> 1437: }
> 1438: } catch (PrivilegedActionException pe) {
What is this catch block for? The cause of a `PrivilegedActionException` should not be a unchecked exception.
src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java line 1453:
> 1451: throw new RuntimeException(cause);
> 1452: }
> 1453: } catch (Exception e) {
Is this block only for the `op.run()` line? Why not keep the old try-catch block around it and move the logic here?
src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java line 1633:
> 1631: }
> 1632: } else {
> 1633: // ACC is present, we have a Subject and SM is permitted:
While extract the `action` variable? The old code on lines 1590-1592 has no problem.
src/java.management/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java line 350:
> 348: @SuppressWarnings("removal")
> 349: private Subject getSubject() {
> 350: Subject subject = null;
Just call `Subject.current()`. When SM is allowed, it is equivalent to `getSubject(AccessController.getContext())`.
src/java.management/share/classes/javax/management/monitor/Monitor.java line 718:
> 716: // The monitor tasks will be executed within this context.
> 717: //
> 718: subject = Subject.current();
If `subject` is only used when SM is not allowed, you can put the assignment above to the else if next line.
src/java.management/share/classes/javax/management/monitor/Monitor.java line 1541:
> 1539: if (ac == null) {
> 1540: // No SecurityManager:
> 1541: Subject.doAs(s, action);
What if `s` is null?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635218675
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635202721
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635205035
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635206172
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635208088
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635209275
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635212375
PR Review Comment: https://git.openjdk.org/jdk/pull/19624#discussion_r1635213527
More information about the serviceability-dev
mailing list