diff options
author | Wayne Davison <wayned@samba.org> | 2013-10-27 10:12:53 -0700 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2013-10-27 10:12:53 -0700 |
commit | 63f91976112b8b2118cc17eb5fc8142175566f4f (patch) | |
tree | 90bfabfa78bc12d0f581d32e2867b5c6e91e888f | |
parent | f643330eb1dc3bb1c15228f8d6cfde1454be87b7 (diff) | |
download | rsync-63f91976112b8b2118cc17eb5fc8142175566f4f.tar.gz |
Return an error if a buffer overflows in do_mknod().
-rw-r--r-- | syscall.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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; |