From a40fea29c0458c996db89f39538a9ad82c7090e4 Mon Sep 17 00:00:00 2001 From: Scott Marlow Date: Tue, 1 Nov 2022 10:23:46 -0400 Subject: [PATCH] HHH-15656 use privileged action when invoking ScheduledExecutorService.shutdown Signed-off-by: Scott Marlow --- .../DriverManagerConnectionProviderImpl.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java index c5a038ee13..2060bf698b 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java @@ -6,6 +6,8 @@ */ package org.hibernate.engine.jdbc.connections.internal; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; @@ -28,6 +30,7 @@ import org.hibernate.cfg.AvailableSettings; import org.hibernate.dialect.Database; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.internal.util.config.ConfigurationHelper; +import org.hibernate.internal.util.securitymanager.SystemSecurityManager; import org.hibernate.service.UnknownUnwrapTypeException; import org.hibernate.service.spi.Configurable; import org.hibernate.service.spi.ServiceException; @@ -605,7 +608,22 @@ public class DriverManagerConnectionProviderImpl CONNECTIONS_MESSAGE_LOGGER.cleaningUpConnectionPool( pool.getUrl() ); active = false; if ( executorService != null ) { - executorService.shutdown(); + PrivilegedAction delegateToPrivilegedAction = + new PrivilegedAction() { + + @Override + public Object run() { + executorService.shutdown(); + return null; + } + }; + if ( SystemSecurityManager.isSecurityManagerEnabled() ) { + AccessController.doPrivileged( + delegateToPrivilegedAction ); + } + else { + delegateToPrivilegedAction.run(); + } } executorService = null; try {