The resolve_mac_* functions are currently not reentrant-safe because they are using ether_aton. Thus all functions returning a mac address in a similar way must also ensure that their data is in a statically allocated buffer and not on a stack.
resolve_mac_from_cache did that for the wrong buffer.
Signed-off-by: Sven Eckelmann sven@narfation.org --- functions.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/functions.c b/functions.c index 9e03e72..959784b 100644 --- a/functions.c +++ b/functions.c @@ -630,8 +630,8 @@ static int resolve_mac_from_cache_parse(struct ndmsg *ndmsg, size_t len_payload, static struct ether_addr *resolve_mac_from_cache(int ai_family, const void *l3addr) { - static uint8_t l3addr_tmp[16]; - struct ether_addr mac_tmp; + uint8_t l3addr_tmp[16]; + static struct ether_addr mac_tmp; struct ether_addr *mac_result = NULL; void *buf = NULL; size_t buflen;
It is not necessary to check the remaining msg buffer coming from the kernel when already the correct mac address was found.
Signed-off-by: Sven Eckelmann sven@narfation.org --- functions.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/functions.c b/functions.c index 959784b..f2b23f2 100644 --- a/functions.c +++ b/functions.c @@ -683,6 +683,7 @@ static struct ether_addr *resolve_mac_from_cache(int ai_family, if (parsed) { if (memcmp(&l3addr_tmp, l3addr, l3_len) == 0) { mac_result = &mac_tmp; + finished = 1; break; } }
On Tuesday 15 October 2013 18:01:09 Sven Eckelmann wrote:
It is not necessary to check the remaining msg buffer coming from the kernel when already the correct mac address was found.
Signed-off-by: Sven Eckelmann sven@narfation.org
functions.c | 1 + 1 file changed, 1 insertion(+)
Applied in revision 7cd9934.
Thanks, Marek
On Tuesday 15 October 2013 18:01:08 Sven Eckelmann wrote:
The resolve_mac_* functions are currently not reentrant-safe because they are using ether_aton. Thus all functions returning a mac address in a similar way must also ensure that their data is in a statically allocated buffer and not on a stack.
resolve_mac_from_cache did that for the wrong buffer.
Signed-off-by: Sven Eckelmann sven@narfation.org
functions.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Applied in revision ef41a8d.
Thanks, Marek
b.a.t.m.a.n@lists.open-mesh.org