gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] 02/02: -do not crash on protocol violations


From: gnunet
Subject: [gnunet] 02/02: -do not crash on protocol violations
Date: Thu, 01 Dec 2022 08:10:02 +0100

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

commit dd33576598fe43f8f224e896a63e6c354ee514ea
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Thu Dec 1 16:09:54 2022 +0900

    -do not crash on protocol violations
---
 src/transport/gnunet-service-tng.c | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/transport/gnunet-service-tng.c 
b/src/transport/gnunet-service-tng.c
index 5976bd5b1..32c8b816d 100644
--- a/src/transport/gnunet-service-tng.c
+++ b/src/transport/gnunet-service-tng.c
@@ -4764,15 +4764,18 @@ dv_encrypt (struct DVKeyState *key, const void *in, 
void *dst, size_t in_size)
  * @param ciph cipher text to decrypt
  * @param[out] out output data to generate (plaintext)
  * @param out_size number of bytes of input in @a ciph and available in @a out
+ * @return GNUNET_OK on success
  */
-static void
+static enum GNUNET_GenericReturnValue
 dv_decrypt (struct DVKeyState *key,
             void *out,
             const void *ciph,
             size_t out_size)
 {
-  GNUNET_assert (
-    0 == gcry_cipher_decrypt (key->cipher, out, out_size, ciph, out_size));
+  return (0 ==
+          gcry_cipher_decrypt (key->cipher,
+                               out, out_size,
+                               ciph, out_size)) ? GNUNET_OK : GNUNET_SYSERR;
 }
 
 
@@ -8254,8 +8257,22 @@ handle_dv_box (void *cls, const struct 
TransportDVBoxMessage *dvb)
 
     GNUNET_assert (hdr_len >=
                    sizeof(ppay) + sizeof(struct GNUNET_MessageHeader));
-    dv_decrypt (key, &ppay, hdr, sizeof(ppay));
-    dv_decrypt (key, &body, &hdr[sizeof(ppay)], hdr_len - sizeof(ppay));
+    if (GNUNET_OK != dv_decrypt (key, &ppay, hdr, sizeof(ppay)))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  "Error decrypting DV payload header\n");
+      GNUNET_break_op (0);
+      finish_cmc_handling (cmc);
+      return;
+    }
+    if (GNUNET_OK != dv_decrypt (key, &body, &hdr[sizeof(ppay)], hdr_len - 
sizeof(ppay)))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  "Error decrypting DV payload\n");
+      GNUNET_break_op (0);
+      finish_cmc_handling (cmc);
+      return;
+    }
     dv_key_clean (key);
     if (ntohs (mh->size) != sizeof(body))
     {

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]