From 63f91976112b8b2118cc17eb5fc8142175566f4f Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sun, 27 Oct 2013 10:12:53 -0700 Subject: [PATCH] Return an error if a buffer overflows in do_mknod(). --- syscall.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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; -- 2.47.2