From ecb9e0e3df33b3f7551d84270edbf617d697b1b5 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 6 May 2020 22:13:06 +0200 Subject: [PATCH] acd: avoid alloca() inside an unbounded loop (cherry picked from commit b447c80ad811850b9540225a96cb5496f8210b34) --- src/devices/nm-acd-manager.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/devices/nm-acd-manager.c b/src/devices/nm-acd-manager.c index 735dd25b09..d9caadc6b6 100644 --- a/src/devices/nm-acd-manager.c +++ b/src/devices/nm-acd-manager.c @@ -81,7 +81,20 @@ _acd_event_to_string (unsigned int event) return NULL; } -#define acd_event_to_string_a(event) NM_UTILS_LOOKUP_STR_A (_acd_event_to_string, event) +#define ACD_EVENT_TO_STRING_BUF_SIZE 50 + +static const char * +_acd_event_to_string_buf (unsigned event, char buffer[ACD_EVENT_TO_STRING_BUF_SIZE]) +{ + const char *s; + + s = _acd_event_to_string (event); + if (s) + return s; + + g_snprintf (buffer, ACD_EVENT_TO_STRING_BUF_SIZE, "(%u)", event); + return buffer; +} static const char * acd_error_to_string (int error) @@ -172,6 +185,7 @@ acd_event (int fd, while ( !n_acd_pop_event (self->acd, &event) && event) { + char to_string_buffer[ACD_EVENT_TO_STRING_BUF_SIZE]; gs_free char *hwaddr_str = NULL; gboolean check_probing_done = FALSE; @@ -215,7 +229,7 @@ acd_event (int fd, nm_platform_link_get_name (NM_PLATFORM_GET, self->ifindex)); break; default: - _LOGD ("unhandled event '%s'", acd_event_to_string_a (event->event)); + _LOGD ("unhandled event '%s'", _acd_event_to_string_buf (event->event, to_string_buffer)); break; }