summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2024-02-24 17:13:06 +0100
committerSander Vrijders <sander@ouroboros.rocks>2024-02-26 08:59:15 +0100
commit12c3298335c48fcdd1551c1474f9afe07e9a067f (patch)
treeb6d847d56ac9cdf5ad8d5dfed0f791e19d4d0c55 /src
parent82aec24db65fd3bf06f60a8952c1b0b3dfd05ec4 (diff)
downloadouroboros-12c3298335c48fcdd1551c1474f9afe07e9a067f.tar.gz
ouroboros-12c3298335c48fcdd1551c1474f9afe07e9a067f.zip
irmd: Fix wrong hash length when getting ipcpd
The get_ipcpd_by_dst function was returning the hash length of the last IPCP in the list instead of the length of the actual hash. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src')
-rw-r--r--src/irmd/ipcp.c3
-rw-r--r--src/irmd/main.c5
2 files changed, 4 insertions, 4 deletions
diff --git a/src/irmd/ipcp.c b/src/irmd/ipcp.c
index d7abe15d..5a9a79d3 100644
--- a/src/irmd/ipcp.c
+++ b/src/irmd/ipcp.c
@@ -107,7 +107,8 @@ ipcp_msg_t * send_recv_ipcp_msg(pid_t pid,
free(sock_path);
len = ipcp_msg__get_packed_size(msg);
- if (len == 0) {
+ if (len == 0 || len >= SOCK_BUF_SIZE) {
+ log_warn("IPCP message has invalid size: %zd.", len);
close(sockfd);
return NULL;
}
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 6e1a1262..bc13fa7c 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -970,9 +970,7 @@ static int get_ipcp_by_dst(const char * dst,
type = ipcps[i]->type;
algo = ipcps[i]->hash_algo;
- hash->len = hash_len(algo);
-
- tmp = ipcps[i]->pid;
+ tmp = ipcps[i]->pid;
enrolled = strcmp(ipcps[i]->layer, "Not enrolled.") != 0;
@@ -984,6 +982,7 @@ static int get_ipcp_by_dst(const char * dst,
if (err == 0 /* solution found */ || !enrolled)
continue;
+ hash->len = hash_len(algo);
hash->data = malloc(hash->len);
if (hash->data == NULL) {
log_warn("Failed to malloc hash for query.");