From e8dcf678f2b3fafd18c09eb957e4d4a83e792d54 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 14 Apr 2014 13:34:34 +0200 Subject: [PATCH 12/15] BUG/MEDIUM: systemd-wrapper: fix locating of haproxy binary BUG/MEDIUM: systemd-wrapper: fix locating of haproxy binary OpenBSD complains this way due to strncat() : src/haproxy-systemd-wrapper.o(.text+0xd5): In function `spawn_haproxy': src/haproxy-systemd-wrapper.c:33: warning: strcat() is almost always misused, please use strlcat() In fact, the code before strncat() here is wrong, because it may dereference a NULL if /proc/self/exe is not readable. So fix it and get rid of strncat() at the same time. No backport is needed. --- src/haproxy-systemd-wrapper.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/haproxy-systemd-wrapper.c b/src/haproxy-systemd-wrapper.c index c63f41ff7df6..8485dcd11da8 100644 --- a/src/haproxy-systemd-wrapper.c +++ b/src/haproxy-systemd-wrapper.c @@ -24,13 +24,18 @@ static char **main_argv; static void locate_haproxy(char *buffer, size_t buffer_size) { - char* end = NULL; + char *end = NULL; + if (readlink("/proc/self/exe", buffer, buffer_size) > 0) end = strrchr(buffer, '/'); - if (end == NULL) + + if (end == NULL) { strncpy(buffer, "/usr/sbin/haproxy", buffer_size); + return; + } end[1] = '\0'; - strncat(buffer, "haproxy", buffer_size); + strncpy(end + 1, "haproxy", buffer + buffer_size - (end + 1)); + buffer[buffer_size - 1] = '\0'; } static void spawn_haproxy(char **pid_strv, int nb_pid) -- 1.8.4.5