From: Wayne Davison Date: Sun, 27 Oct 2013 17:12:53 +0000 (-0700) Subject: Return an error if a buffer overflows in do_mknod(). X-Git-Tag: v3.1.1pre1~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=63f91976112b8b2118cc17eb5fc8142175566f4f;p=thirdparty%2Frsync.git Return an error if a buffer overflows in do_mknod(). --- diff --git a/syscall.c b/syscall.c index fd23d151..117f1a42 100644 --- a/syscall.c +++ b/syscall.c @@ -147,13 +147,13 @@ int do_mknod(const char *pathname, mode_t mode, dev_t dev) if (S_ISSOCK(mode)) { int sock; struct sockaddr_un saddr; + unsigned int len = strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path); + if (len >= sizeof saddr.sun_path) { + errno = ENAMETOOLONG; + return -1; + } #ifdef HAVE_SOCKADDR_UN_LEN - unsigned int len = -#endif - strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path); -#ifdef HAVE_SOCKADDR_UN_LEN - saddr.sun_len = len >= sizeof saddr.sun_path - ? sizeof saddr.sun_path : len + 1; + saddr.sun_len = len + 1; #endif saddr.sun_family = AF_UNIX;