|
|
3053a1 |
From 1a0f68d2058f361fc23ed9babcd618a838744bf8 Mon Sep 17 00:00:00 2001
|
|
|
3053a1 |
From: akarl <mike@mwsys.mine.bz>
|
|
|
3053a1 |
Date: Sun, 24 Apr 2022 21:16:52 +0200
|
|
|
3053a1 |
Subject: [PATCH] Implement BIO_CTRL_GET_KTLS_SEND and BIO_CTRL_GET_KTLS_SEND
|
|
|
3053a1 |
|
|
|
3053a1 |
Openssl 3.0 requires to respond to this controls. According to there
|
|
|
3053a1 |
documentation it should not need them, but in practice openssl's own source
|
|
|
3053a1 |
is full of places where negative return values are not checked.
|
|
|
3053a1 |
|
|
|
3053a1 |
(cherry picked from commit 9d7c20ce8fe50bd6de54e7480b5096761a510daf)
|
|
|
3053a1 |
---
|
|
|
3053a1 |
libfreerdp/core/gateway/rdg.c | 18 +++++++++++++++++-
|
|
|
3053a1 |
libfreerdp/core/gateway/tsg.c | 9 ++++++++-
|
|
|
3053a1 |
2 files changed, 25 insertions(+), 2 deletions(-)
|
|
|
3053a1 |
|
|
|
3053a1 |
diff --git a/libfreerdp/core/gateway/rdg.c b/libfreerdp/core/gateway/rdg.c
|
|
|
3053a1 |
index 72019ede8..5d970f39e 100644
|
|
|
3053a1 |
--- a/libfreerdp/core/gateway/rdg.c
|
|
|
3053a1 |
+++ b/libfreerdp/core/gateway/rdg.c
|
|
|
3053a1 |
@@ -2483,7 +2483,23 @@ static long rdg_bio_ctrl(BIO* in_bio, int cmd, long arg1, void* arg2)
|
|
|
3053a1 |
*/
|
|
|
3053a1 |
status = BIO_ctrl(tlsOut->bio, cmd, arg1, arg2);
|
|
|
3053a1 |
}
|
|
|
3053a1 |
-
|
|
|
3053a1 |
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
|
|
3053a1 |
+ else if (cmd == BIO_CTRL_GET_KTLS_SEND)
|
|
|
3053a1 |
+ {
|
|
|
3053a1 |
+ /* Even though BIO_get_ktls_send says that returning negative values is valid
|
|
|
3053a1 |
+ * openssl internal sources are full of if(!BIO_get_ktls_send && ) stuff. This has some
|
|
|
3053a1 |
+ * nasty sideeffects. return 0 as proper no KTLS offloading flag
|
|
|
3053a1 |
+ */
|
|
|
3053a1 |
+ status = 0;
|
|
|
3053a1 |
+ }
|
|
|
3053a1 |
+ else if (cmd == BIO_CTRL_GET_KTLS_RECV)
|
|
|
3053a1 |
+ {
|
|
|
3053a1 |
+ /* Even though BIO_get_ktls_recv says that returning negative values is valid
|
|
|
3053a1 |
+ * there is no reason to trust trust negative values are implemented right everywhere
|
|
|
3053a1 |
+ */
|
|
|
3053a1 |
+ status = 0;
|
|
|
3053a1 |
+ }
|
|
|
3053a1 |
+#endif
|
|
|
3053a1 |
return status;
|
|
|
3053a1 |
}
|
|
|
3053a1 |
|
|
|
3053a1 |
diff --git a/libfreerdp/core/gateway/tsg.c b/libfreerdp/core/gateway/tsg.c
|
|
|
3053a1 |
index c03f266f2..70fdf9e27 100644
|
|
|
3053a1 |
--- a/libfreerdp/core/gateway/tsg.c
|
|
|
3053a1 |
+++ b/libfreerdp/core/gateway/tsg.c
|
|
|
3053a1 |
@@ -2716,7 +2716,14 @@ static long transport_bio_tsg_ctrl(BIO* bio, int cmd, long arg1, void* arg2)
|
|
|
3053a1 |
status = 1;
|
|
|
3053a1 |
}
|
|
|
3053a1 |
break;
|
|
|
3053a1 |
-
|
|
|
3053a1 |
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
|
|
3053a1 |
+ case BIO_CTRL_GET_KTLS_SEND:
|
|
|
3053a1 |
+ status = 0;
|
|
|
3053a1 |
+ break;
|
|
|
3053a1 |
+ case BIO_CTRL_GET_KTLS_RECV:
|
|
|
3053a1 |
+ status = 0;
|
|
|
3053a1 |
+ break;
|
|
|
3053a1 |
+#endif
|
|
|
3053a1 |
default:
|
|
|
3053a1 |
break;
|
|
|
3053a1 |
}
|
|
|
3053a1 |
--
|
|
|
3053a1 |
2.36.1
|
|
|
3053a1 |
|