From: Andre Noll Date: Mon, 19 Sep 2011 17:12:40 +0000 (+0200) Subject: Fix UNIX_PATH_MAX on NetBSD. X-Git-Tag: v0.4.9~16^2 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=f6a289781404811986a11030ea7552fa5b0ca9bf Fix UNIX_PATH_MAX on NetBSD. UNIX_PATH_MAX was hardcoded to 108 for all systems. However, at least on 32 bit NetBSD the size of the sun_path buffer is only 104 bytes. This resulted in a very nasty bug caused by a memset() overwriting 4 bytes on the stack. Fix this by calculating the correct value at compile time. --- diff --git a/net.h b/net.h index 80f57944..79c5994c 100644 --- a/net.h +++ b/net.h @@ -8,13 +8,15 @@ /** \file net.h exported symbols from net.c */ /** - * the buffer size of the sun_path component of struct sockaddr_un + * The buffer size of the sun_path component of struct sockaddr_un. * - * While glibc doesn't define \p UNIX_PATH_MAX, it - * documents it has being limited to 108 bytes. + * While glibc doesn't define \p UNIX_PATH_MAX, it documents it has being + * limited to 108 bytes. On NetBSD it is only 104 bytes though. We trust \p + * UNIX_PATH_MAX if it is defined and use the size of the ->sun_path member + * otherwise. This should be safe everywhere. */ #ifndef UNIX_PATH_MAX -#define UNIX_PATH_MAX 108 +#define UNIX_PATH_MAX (sizeof(((struct sockaddr_un *)0)->sun_path)) #endif /* Userland defines for Linux DCCP support. */