aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2022-12-01 16:09:54 +0900
committerMartin Schanzenbach <schanzen@gnunet.org>2022-12-01 16:09:54 +0900
commitdd33576598fe43f8f224e896a63e6c354ee514ea (patch)
tree09075c1df63ee5837a0702ca6ba3e1414563886b /src/transport
parentcd32211abb9c525beeeb994c3c1472bc2d365f5b (diff)
downloadgnunet-dd33576598fe43f8f224e896a63e6c354ee514ea.tar.gz
gnunet-dd33576598fe43f8f224e896a63e6c354ee514ea.zip
-do not crash on protocol violations
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/gnunet-service-tng.c27
1 files 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)
4764 * @param ciph cipher text to decrypt 4764 * @param ciph cipher text to decrypt
4765 * @param[out] out output data to generate (plaintext) 4765 * @param[out] out output data to generate (plaintext)
4766 * @param out_size number of bytes of input in @a ciph and available in @a out 4766 * @param out_size number of bytes of input in @a ciph and available in @a out
4767 * @return GNUNET_OK on success
4767 */ 4768 */
4768static void 4769static enum GNUNET_GenericReturnValue
4769dv_decrypt (struct DVKeyState *key, 4770dv_decrypt (struct DVKeyState *key,
4770 void *out, 4771 void *out,
4771 const void *ciph, 4772 const void *ciph,
4772 size_t out_size) 4773 size_t out_size)
4773{ 4774{
4774 GNUNET_assert ( 4775 return (0 ==
4775 0 == gcry_cipher_decrypt (key->cipher, out, out_size, ciph, out_size)); 4776 gcry_cipher_decrypt (key->cipher,
4777 out, out_size,
4778 ciph, out_size)) ? GNUNET_OK : GNUNET_SYSERR;
4776} 4779}
4777 4780
4778 4781
@@ -8254,8 +8257,22 @@ handle_dv_box (void *cls, const struct TransportDVBoxMessage *dvb)
8254 8257
8255 GNUNET_assert (hdr_len >= 8258 GNUNET_assert (hdr_len >=
8256 sizeof(ppay) + sizeof(struct GNUNET_MessageHeader)); 8259 sizeof(ppay) + sizeof(struct GNUNET_MessageHeader));
8257 dv_decrypt (key, &ppay, hdr, sizeof(ppay)); 8260 if (GNUNET_OK != dv_decrypt (key, &ppay, hdr, sizeof(ppay)))
8258 dv_decrypt (key, &body, &hdr[sizeof(ppay)], hdr_len - sizeof(ppay)); 8261 {
8262 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
8263 "Error decrypting DV payload header\n");
8264 GNUNET_break_op (0);
8265 finish_cmc_handling (cmc);
8266 return;
8267 }
8268 if (GNUNET_OK != dv_decrypt (key, &body, &hdr[sizeof(ppay)], hdr_len - sizeof(ppay)))
8269 {
8270 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
8271 "Error decrypting DV payload\n");
8272 GNUNET_break_op (0);
8273 finish_cmc_handling (cmc);
8274 return;
8275 }
8259 dv_key_clean (key); 8276 dv_key_clean (key);
8260 if (ntohs (mh->size) != sizeof(body)) 8277 if (ntohs (mh->size) != sizeof(body))
8261 { 8278 {