This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 7ed0893eb5 Using cleanups here to improve safety
7ed0893eb5 is described below
commit 7ed0893eb50cd87a4db32dd3246b288d112062ab
Author: remm <[email protected]>
AuthorDate: Fri Oct 27 14:39:08 2023 +0200
Using cleanups here to improve safety
Otherwise, the segments are still alive after the actual free operation.
This way the check will fail before the actual deallocation.
---
.../util/net/openssl/panama/OpenSSLContext.java | 27 +++++++++++++---------
.../util/net/openssl/panama/OpenSSLEngine.java | 24 +++++++++++--------
2 files changed, 31 insertions(+), 20 deletions(-)
diff --git
a/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
b/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
index 65de58247e..81100fc323 100644
---
a/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
+++
b/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
@@ -43,6 +43,7 @@ import java.util.Base64;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Consumer;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLEngine;
@@ -1458,9 +1459,20 @@ public class OpenSSLContext implements
org.apache.tomcat.util.net.SSLContext {
this.negotiableProtocols = negotiableProtocols;
// Use another arena to avoid keeping a reference through segments
// This also allows making further accesses to the main pointers
safer
- this.sslCtx = sslCtx.reinterpret(ValueLayout.ADDRESS.byteSize(),
stateArena, null);
+ this.sslCtx = sslCtx.reinterpret(ValueLayout.ADDRESS.byteSize(),
stateArena,
+ new Consumer<MemorySegment>() {
+ @Override
+ public void accept(MemorySegment t) {
+ SSL_CTX_free(t);
+ }});
if (!MemorySegment.NULL.equals(confCtx)) {
- this.confCtx =
confCtx.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena, null);
+ this.confCtx =
confCtx.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena,
+ new Consumer<MemorySegment>() {
+ @Override
+ public void accept(MemorySegment t) {
+ SSL_CONF_CTX_free(t);
+ }
+ });
} else {
this.confCtx = null;
}
@@ -1468,15 +1480,8 @@ public class OpenSSLContext implements
org.apache.tomcat.util.net.SSLContext {
@Override
public void run() {
- try {
- states.remove(Long.valueOf(sslCtx.address()));
- SSL_CTX_free(sslCtx);
- if (confCtx != null) {
- SSL_CONF_CTX_free(confCtx);
- }
- } finally {
- stateArena.close();
- }
+ states.remove(Long.valueOf(sslCtx.address()));
+ stateArena.close();
}
}
}
diff --git
a/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
b/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
index 4ef4f41c12..bd23503956 100644
---
a/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
+++
b/modules/openssl-foreign/src/main/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
@@ -47,6 +47,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Consumer;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLEngineResult;
@@ -1740,19 +1741,24 @@ public final class OpenSSLEngine extends SSLEngine
implements SSLUtil.ProtocolIn
this.noOcspCheck = noOcspCheck;
// Use another arena to avoid keeping a reference through segments
// This also allows making further accesses to the main pointers
safer
- this.ssl = ssl.reinterpret(ValueLayout.ADDRESS.byteSize(),
stateArena, null);
- this.networkBIO =
networkBIO.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena, null);
+ this.ssl = ssl.reinterpret(ValueLayout.ADDRESS.byteSize(),
stateArena,
+ new Consumer<MemorySegment>() {
+ @Override
+ public void accept(MemorySegment t) {
+ SSL_free(t);
+ }});
+ this.networkBIO =
networkBIO.reinterpret(ValueLayout.ADDRESS.byteSize(), stateArena,
+ new Consumer<MemorySegment>() {
+ @Override
+ public void accept(MemorySegment t) {
+ BIO_free(t);
+ }});
}
@Override
public void run() {
- try {
- states.remove(Long.valueOf(ssl.address()));
- BIO_free(networkBIO);
- SSL_free(ssl);
- } finally {
- stateArena.close();
- }
+ states.remove(Long.valueOf(ssl.address()));
+ stateArena.close();
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]