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

Bug#683825: please add assertion for non-zero status in _pthread_unlock()



Package: libc0.1
Version: 2.13-33
Severity: wishlist
Tags: patch
User: debian-bsd@lists.debian.org
Usertags: kfreebsd

The implementation of _pthread_unlock() doesn't react gracefully when it is
asked to unlock a non-claimed resource. Thus, lock->__status can never be 0.

Unfortunately when __status == 0 is passed, it will segfault in a very
confusing way.

Please use an assert() to give a more meaningful failure message.

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: kfreebsd-i386 (i686)

Kernel: kFreeBSD 8.1-1-amd64
Locale: LANG=ca_AD.UTF-8, LC_CTYPE=ca_AD.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libc0.1 depends on:
ii  libc-bin  2.13-33
ii  libgcc1   1:4.7.0-13

Versions of packages libc0.1 recommends:
ii  libc0.1-i686  2.13-33

Versions of packages libc0.1 suggests:
ii  debconf [debconf-2.0]  1.5.43
pn  glibc-doc              <none>
ii  locales                2.13-33
ii  locales-all [locales]  2.13-33

-- debconf information excluded
--- a/linuxthreads/spinlock.c
+++ b/linuxthreads/spinlock.c
@@ -19,6 +19,7 @@
 #include <time.h>
 #include <stdlib.h>
 #include <limits.h>
+#include <assert.h>
 #include "pthread.h"
 #include "internals.h"
 #include "spinlock.h"
@@ -172,6 +173,9 @@
   int maxprio;
 #endif
 
+  /* spinlock must be taken in order to unlock it */
+  assert (lock->__status != 0);
+
 #if defined TEST_FOR_COMPARE_AND_SWAP
   if (!__pthread_has_cas)
 #endif

Reply to: