commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 01/01: patches/hash-weakref: New patch to fix use-after-free


From: Samuel Thibault
Subject: [hurd] 01/01: patches/hash-weakref: New patch to fix use-after-free
Date: Tue, 19 Dec 2017 20:49:36 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch master
in repository hurd.

commit 579bc372b785bea05ffc1d1b2bd9f485734596a4
Author: Samuel Thibault <address@hidden>
Date:   Tue Dec 19 20:10:24 2017 +0000

    patches/hash-weakref: New patch to fix use-after-free
    
    Closes: Bug#882507
---
 debian/changelog            |  6 ++++++
 debian/patches/hash-weakref | 52 +++++++++++++++++++++++++++++++++++++++++++++
 debian/patches/series       |  1 +
 3 files changed, 59 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 3982270..3a8498b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+hurd (1:0.9.git20171119-3) unstable; urgency=medium
+
+  * patches/hash-weakref: New patch to fix use-after-free. Closes: Bug#882507.
+
+ -- Samuel Thibault <address@hidden>  Tue, 19 Dec 2017 20:09:37 +0000
+
 hurd (1:0.9.git20171119-2) unstable; urgency=medium
 
   * patches/pie-core: New patch to add at_entry note for PIE core dumps.
diff --git a/debian/patches/hash-weakref b/debian/patches/hash-weakref
new file mode 100644
index 0000000..ec44966
--- /dev/null
+++ b/debian/patches/hash-weakref
@@ -0,0 +1,52 @@
+commit b37c7dd4dd0de064b7ae2c9ad5687ebb635677c8
+Author: Samuel Thibault <address@hidden>
+Date:   Tue Dec 19 01:39:36 2017 +0100
+
+    libfshelp: Add weak reference for hash table reference
+    
+    Fixes reference w/o send right crash.
+    
+    * libfshelp/get-identity.c (fshelp_get_identity): Get weak reference for
+    the hash table reference.
+    (id_initialize): Pass id_clean as dropweak_routine instead of
+    clean_routine to ports_create_class.
+    (id_clean): Remove from hash table only if there are no hard references
+    left, i.e. we didn't reacquired a port right in between.
+
+diff --git a/libfshelp/get-identity.c b/libfshelp/get-identity.c
+index 17244dee..9f92272e 100644
+--- a/libfshelp/get-identity.c
++++ b/libfshelp/get-identity.c
+@@ -42,7 +42,12 @@ id_clean (void *cookie)
+ {
+   struct idspec *i = cookie;
+   pthread_mutex_lock (&idlock);
+-  hurd_ihash_locp_remove (&idhash, i->id_hashloc);
++  if (refcounts_hard_references(&i->pi.refcounts) == 0)
++    {
++      /* Nobody got a send right in between, we can remove from the hash.  */
++      hurd_ihash_locp_remove (&idhash, i->id_hashloc);
++      ports_port_deref_weak (&i->pi);
++    }
+   pthread_mutex_unlock (&idlock);
+ }
+ 
+@@ -50,7 +55,7 @@ static void
+ id_initialize ()
+ {
+   assert_backtrace (!idclass);
+-  idclass = ports_create_class (id_clean, NULL);
++  idclass = ports_create_class (NULL, id_clean);
+ }
+ 
+ error_t
+@@ -75,6 +80,9 @@ fshelp_get_identity (struct port_bucket *bucket,
+       if (err)
+         goto lose_port;
+ 
++      /* Weak reference for the hash entry.  */
++      ports_port_ref_weak(&i->pi);
++
+       *pt = ports_get_right (i);
+       ports_port_deref (i);
+     }
diff --git a/debian/patches/series b/debian/patches/series
index 0cb5a88..1cba2e7 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -30,3 +30,4 @@ libports-iterate-refcount.patch
 exec_filename_rpctrace.patch
 exec_set_exe.patch
 pie-core
+hash-weakref

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]