From: Willy Tarreau Date: Mon, 14 Apr 2014 13:34:34 +0000 (+0200) Subject: BUG/MEDIUM: systemd-wrapper: fix locating of haproxy binary X-Git-Tag: v1.5-dev23~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e5eddafa89ee2e468da37938a002761e3f2126b4;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/haproxy-systemd-wrapper.c b/src/haproxy-systemd-wrapper.c index c63f41ff7d..8485dcd11d 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)