Hello community, here is the log from the commit of package glibc for openSUSE:Factory checked in at 2016-07-03 12:17:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/glibc (Old) and /work/SRC/openSUSE:Factory/.glibc.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "glibc" Changes: -------- --- /work/SRC/openSUSE:Factory/glibc/glibc-testsuite.changes 2016-06-05 14:17:30.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.glibc.new/glibc-testsuite.changes 2016-07-03 12:17:26.000000000 +0200 @@ -1,0 +2,6 @@ +Thu Jun 9 09:17:10 UTC 2016 - schwab@suse.de + +- nscd-gc-crash.patch: Fix nscd assertion failure in gc (bsc#965699, BZ + #19755) + +------------------------------------------------------------------- @@ -298 +304 @@ - bsc#940195 bsc#940332 + bsc#940195 bsc#940332 bsc#944494 bsc#968787 @@ -444 +450 @@ - * CVE-2013-7423 bsc#915526 bsc#934084 + * CVE-2013-7423 bsc#915526 bsc#934084 bsc#973010 @@ -468,0 +475 @@ + (bsc#967190) glibc-utils.changes: same change glibc.changes: same change New: ---- nscd-gc-crash.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ glibc-testsuite.spec ++++++ --- /var/tmp/diff_new_pack.GAbNv0/_old 2016-07-03 12:17:28.000000000 +0200 +++ /var/tmp/diff_new_pack.GAbNv0/_new 2016-07-03 12:17:28.000000000 +0200 @@ -308,6 +308,8 @@ Patch1055: 0056-Fix-strfmon_l-Use-specified-locale-for-number-format.patch # PATCH-FIX-UPSTREAM sunrpc: Do not use alloca in clntudp_call (CVE-2016-4429, BZ #20112) Patch1056: clntudp-call-alloca.patch +# PATCH-FIX-UPSTREAM Fix nscd assertion failure in gc (BZ #19755) +Patch1057: nscd-gc-crash.patch ### # Patches awaiting upstream approval @@ -587,6 +589,7 @@ %patch1054 -p1 %patch1055 -p1 %patch1056 -p1 +%patch1057 -p1 %patch2000 -p1 %patch2001 -p1 @@ -872,6 +875,8 @@ done < $sum done set -$o + # Fail build if there where compilation errors during testsuite run + test -f tests.sum } %else # This has to pass on all platforms! glibc-utils.spec: same change glibc.spec: same change ++++++ nscd-gc-crash.patch ++++++ [BZ #19755] * nscd/pwdcache.c (cache_addpw): Lock prune_run_lock while adding new entries in auto-propagate mode. * nscd/grpcache.c (cache_addgr): Likewise. Index: glibc-2.23/nscd/grpcache.c =================================================================== --- glibc-2.23.orig/nscd/grpcache.c +++ glibc-2.23/nscd/grpcache.c @@ -205,10 +205,19 @@ cache_addgr (struct database_dyn *db, in dataset = NULL; if (he == NULL) - dataset = (struct dataset *) mempool_alloc (db, total + n, 1); + { + /* Prevent an INVALIDATE request from pruning the data between + the two calls to cache_add. */ + if (db->propagate) + pthread_mutex_lock (&db->prune_run_lock); + dataset = (struct dataset *) mempool_alloc (db, total + n, 1); + } if (dataset == NULL) { + if (he == NULL && db->propagate) + pthread_mutex_unlock (&db->prune_run_lock); + /* We cannot permanently add the result in the moment. But we can provide the result as is. Store the data in some temporary memory. */ @@ -396,6 +405,8 @@ cache_addgr (struct database_dyn *db, in out: pthread_rwlock_unlock (&db->lock); + if (he == NULL && db->propagate) + pthread_mutex_unlock (&db->prune_run_lock); } } Index: glibc-2.23/nscd/pwdcache.c =================================================================== --- glibc-2.23.orig/nscd/pwdcache.c +++ glibc-2.23/nscd/pwdcache.c @@ -198,10 +198,19 @@ cache_addpw (struct database_dyn *db, in dataset = NULL; if (he == NULL) - dataset = (struct dataset *) mempool_alloc (db, total + n, 1); + { + /* Prevent an INVALIDATE request from pruning the data between + the two calls to cache_add. */ + if (db->propagate) + pthread_mutex_lock (&db->prune_run_lock); + dataset = (struct dataset *) mempool_alloc (db, total + n, 1); + } if (dataset == NULL) { + if (he == NULL && db->propagate) + pthread_mutex_unlock (&db->prune_run_lock); + /* We cannot permanently add the result in the moment. But we can provide the result as is. Store the data in some temporary memory. */ @@ -374,6 +383,8 @@ cache_addpw (struct database_dyn *db, in out: pthread_rwlock_unlock (&db->lock); + if (he == NULL && db->propagate) + pthread_mutex_unlock (&db->prune_run_lock); } }