File 0003-Firs-crash-on-ARM-during-steam-protocol-dissection.patch of Package ndpi

From 817c00b65ab4d0bf78927e494227ac5308417f91 Mon Sep 17 00:00:00 2001
From: Luca Deri <deri@ntop.org>
Date: Wed, 18 Aug 2021 11:33:33 +0200
Subject: [PATCH 3/3] Firs crash on ARM during steam protocol dissection

---
 src/lib/protocols/steam.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/lib/protocols/steam.c b/src/lib/protocols/steam.c
index 8cd3ec41..53bbfc6a 100644
--- a/src/lib/protocols/steam.c
+++ b/src/lib/protocols/steam.c
@@ -114,14 +114,19 @@ static void ndpi_check_steam_udp1(struct ndpi_detection_module_struct *ndpi_stru
   }
 
   /* Check for Steam Datagram Relay (SDR) packets. */
-  if (payload_len > 8 &&
-      ndpi_ntohll(get_u_int64_t(packet->payload, 0)) == 0x0101736470696e67 /* "\x01\x01sdping" */)
-  {
-    NDPI_LOG_INFO(ndpi_struct, "found STEAM (Steam Datagram Relay)\n");
-    ndpi_int_steam_add_connection(ndpi_struct, flow);
-    return;
-  }
+  if (payload_len > 8) {
+    u_int64_t n;
 
+    /* Necessary as simple cast crashes on ARM */
+    memcpy(&n, packet->payload, sizeof(u_int64_t));
+    
+    if(ndpi_ntohll(n) == 0x0101736470696e67 /* "\x01\x01sdping" */) {
+      NDPI_LOG_INFO(ndpi_struct, "found STEAM (Steam Datagram Relay)\n");
+      ndpi_int_steam_add_connection(ndpi_struct, flow);
+      return;
+    }  
+  }
+  
   /* Check if we so far detected the protocol in the request or not. */
   if (flow->steam_stage1 == 0) {
     NDPI_LOG_DBG2(ndpi_struct, "STEAM stage 0: \n");
-- 
2.32.0

openSUSE Build Service is sponsored by