aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--sysdeps/mach/hurd/sendmsg.c12
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index de7f38f..fa670c5 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 a9d1c8c..118fd59 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;