Package: libasyncns0
Severity: minor
Tags: upstream patch

Hello.

Since I forwarded my bugreport, I'll also forward this one, quite
obvious, and still present one, reported by Olof Sivertsson:
https://bugs.freedesktop.org/show_bug.cgi?id=91859

Bug applies to libasyncns release 0.8 and current git revision 68cd5a.

Both asyncns_setuserdata(...) and asyncns_getuserdata(...) contain the
following line:

  assert(q->asyncns = asyncns);


I believe this should not be assignment, but a check for equality, as is
correctly done already in asyncns_isdone(...):

  assert(q->asyncns == asyncns);

This bug probably does not realistically affect anything right now, but
theoretically it's a bad thing, since in an environment, where there's
several asyncns objects, a programming error instead of triggering
assertion may reassign query object to another asyncns object, that may
lead to various use-after-free issues and mystical bugs/crashes.

-- System Information:
Debian Release: 9.0
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64
 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=uk_UA.UTF-8, LC_CTYPE=uk_UA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
--- a/libasyncns/asyncns.c      2009-10-15 04:49:09.000000000 +0300
+++ b/libasyncns/asyncns.c      2017-05-15 01:24:47.573562843 +0300
@@ -1506,7 +1506,7 @@
 void asyncns_setuserdata(asyncns_t *asyncns, asyncns_query_t *q, void 
*userdata) {
     assert(q);
     assert(asyncns);
-    assert(q->asyncns = asyncns);
+    assert(q->asyncns == asyncns);
 
     q->userdata = userdata;
 }
@@ -1514,7 +1514,7 @@
 void* asyncns_getuserdata(asyncns_t *asyncns, asyncns_query_t *q) {
     assert(q);
     assert(asyncns);
-    assert(q->asyncns = asyncns);
+    assert(q->asyncns == asyncns);
 
     return q->userdata;
 }

Reply via email to