From f6a289781404811986a11030ea7552fa5b0ca9bf Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Mon, 19 Sep 2011 19:12:40 +0200 Subject: [PATCH] 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. --- net.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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. */ -- 2.39.5