Blame SOURCES/Implement-BIO_CTRL_GET_KTLS_SEND-and-BIO_CTRL_GET_KT.patch

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