summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/irmd/main.c12
-rw-r--r--src/lib/dev.c2
2 files changed, 9 insertions, 5 deletions
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 59c1c5ec..4284b4c5 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -1507,6 +1507,8 @@ static int flow_accept(pid_t pid,
if (f_out->qs.cypher_s > 0) {
data->data = s;
data->len = SYMMKEYSZ;
+ } else {
+ free(s);
}
log_info("Flow on flow_id %d allocated.", f->flow_id);
@@ -1626,7 +1628,7 @@ static int flow_alloc(pid_t pid,
uint8_t * hash;
ssize_t key_len;
void * pkp; /* my public key pair */
- buffer_t tmp; /* buffer for public key */
+ buffer_t tmp = {NULL, 0}; /* buffer for public key */
uint8_t buf[MSGBUFSZ];
uint8_t * s = NULL;
int err;
@@ -1741,10 +1743,12 @@ static int flow_alloc(pid_t pid,
pthread_rwlock_unlock(&irmd.reg_lock);
free(hash);
- crypt_dh_pkp_destroy(pkp);
- data->data = s;
- data->len = SYMMKEYSZ;
+ if (qs.cypher_s > 0) {
+ crypt_dh_pkp_destroy(pkp);
+ data->data = s;
+ data->len = SYMMKEYSZ;
+ }
log_info("Flow on flow_id %d allocated.", flow_id);
diff --git a/src/lib/dev.c b/src/lib/dev.c
index acf18da2..74a8c62d 100644
--- a/src/lib/dev.c
+++ b/src/lib/dev.c
@@ -475,7 +475,7 @@ static int flow_init(int flow_id,
flow->crypt.flags = qs.cypher_s; /* TODO: remove cypher_s from qos */
- if (flow->crypt.flags > 0)
+ if (flow->crypt.flags > 0 && s != NULL) /* static analyzer s != NULL */
memcpy(flow->crypt.key, s ,SYMMKEYSZ);
else
memset(flow->crypt.key, 0, SYMMKEYSZ);