summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2013-10-27 10:12:53 -0700
committerWayne Davison <wayned@samba.org>2013-10-27 10:12:53 -0700
commit63f91976112b8b2118cc17eb5fc8142175566f4f (patch)
tree90bfabfa78bc12d0f581d32e2867b5c6e91e888f
parentf643330eb1dc3bb1c15228f8d6cfde1454be87b7 (diff)
downloadrsync-63f91976112b8b2118cc17eb5fc8142175566f4f.tar.gz
Return an error if a buffer overflows in do_mknod().
-rw-r--r--syscall.c12
1 files 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;