projects
/
project
/
odhcp6c.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix memory leak in dhcpv6_add_server_cand in case odhcp6c_insert_state fails
[project/odhcp6c.git]
/
src
/
dhcpv6.c
diff --git
a/src/dhcpv6.c
b/src/dhcpv6.c
index cfa3f29e17f5ec39415572cc89207b88730d2dcd..c2a3e3d630a6fb42e0db54696cef2b3b9417cde7 100644
(file)
--- a/
src/dhcpv6.c
+++ b/
src/dhcpv6.c
@@
-1362,6
+1362,7
@@
static void dhcpv6_handle_ia_status_code(const enum dhcpv6_msg orig,
}
}
}
}
+// Note this always takes ownership of cand->ia_na and cand->ia_pd
static void dhcpv6_add_server_cand(const struct dhcpv6_server_cand *cand)
{
size_t cand_len, i;
static void dhcpv6_add_server_cand(const struct dhcpv6_server_cand *cand)
{
size_t cand_len, i;
@@
-1384,7
+1385,10
@@
static void dhcpv6_add_server_cand(const struct dhcpv6_server_cand *cand)
break;
}
break;
}
- odhcp6c_insert_state(STATE_SERVER_CAND, i * sizeof(*c), cand, sizeof(*cand));
+ if (odhcp6c_insert_state(STATE_SERVER_CAND, i * sizeof(*c), cand, sizeof(*cand))) {
+ free(cand->ia_na);
+ free(cand->ia_pd);
+ }
}
static void dhcpv6_clear_all_server_cand(void)
}
static void dhcpv6_clear_all_server_cand(void)