diff options
author | Emilio Pozuelo Monfort <pochu27@gmail.com> | 2010-07-20 19:19:34 -0700 |
---|---|---|
committer | Roland McGrath <roland@redhat.com> | 2010-07-20 19:19:34 -0700 |
commit | 23d101d8eea76469b41c12b10a8e8ed13cf66bc6 (patch) | |
tree | c372519ace339dcddf7e9bac18aaf4196f0fe664 | |
parent | 5dbc3b6cc0b759bf4b22d851ccb9cbf3e3cbc6ef (diff) | |
download | glibc-23d101d8eea76469b41c12b10a8e8ed13cf66bc6.tar.gz glibc-23d101d8eea76469b41c12b10a8e8ed13cf66bc6.tar.xz glibc-23d101d8eea76469b41c12b10a8e8ed13cf66bc6.zip |
Hurd: fix sendmsg memory leak in error paths
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/mach/hurd/sendmsg.c | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index de7f38f8aa..fa670c5d54 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,10 @@ ld.so.cache was broken. With it, there is no way to disable dsocaps like LD_HWCAP_MASK can disable hwcaps. +2010-06-02 Emilio Pozuelo Monfort <pochu27@gmail.com> + + * sysdeps/mach/hurd/sendmsg.c (__libc_sendmsg): Fix memory leaks. + 2010-07-16 Ulrich Drepper <drepper@redhat.com> * sysdeps/x86_64/multiarch/strstr.c: Rewrite to avoid indirect function diff --git a/sysdeps/mach/hurd/sendmsg.c b/sysdeps/mach/hurd/sendmsg.c index a9d1c8c1d4..118fd59a5b 100644 --- a/sysdeps/mach/hurd/sendmsg.c +++ b/sysdeps/mach/hurd/sendmsg.c @@ -109,14 +109,22 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) and talk to it with the ifsock protocol. */ file_t file = __file_name_lookup (addr->sun_path, 0, 0); if (file == MACH_PORT_NULL) - return -1; + { + if (dealloc) + __vm_deallocate (__mach_task_self (), data.addr, len); + return -1; + } err = __ifsock_getsockaddr (file, &aport); __mach_port_deallocate (__mach_task_self (), file); if (err == MIG_BAD_ID || err == EOPNOTSUPP) /* The file did not grok the ifsock protocol. */ err = ENOTSOCK; if (err) - return __hurd_fail (err); + { + if (dealloc) + __vm_deallocate (__mach_task_self (), data.addr, len); + return __hurd_fail (err); + } } else err = EIEIO; |