about summary refs log tree commit diff
diff options
context:
space:
mode:
authorStafford Horne <shorne@gmail.com>2021-09-24 11:29:33 +0900
committerStafford Horne <shorne@gmail.com>2021-09-24 17:30:03 +0900
commit2efca218b56b0ef32289ad448c05b8f482a2e759 (patch)
tree55e9620d1d77c169f45167c299303ed5affbab1d
parent54ff4f1e39067bfd04fb2141710637a11ef88862 (diff)
downloadglibc-2efca218b56b0ef32289ad448c05b8f482a2e759.tar.gz
glibc-2efca218b56b0ef32289ad448c05b8f482a2e759.tar.xz
glibc-2efca218b56b0ef32289ad448c05b8f482a2e759.zip
xsysconf: Only fail on error results and errno set
When testing nptl/tst-pthread-attr-affinity-fail fails with:

    error: xsysconf.c:33: sysconf (83): Cannot allocate memory
    error: 1 test failures

This happens as xsysconf checks the errno after running sysconf.
Internally the sysconf request for _SC_NPROCESSORS_CONF on linux
allocates memory.  But there is a problem, even though malloc succeeds
errno is getting set to ENOMEM.

POSIX allows successful calls to clobber errno.  So xsysconf just
checking errno is wrong.  Fix xsysconf by only failing if we have an
error result and errno is set.
-rw-r--r--support/xsysconf.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/support/xsysconf.c b/support/xsysconf.c
index 2607d3a720..fce7795417 100644
--- a/support/xsysconf.c
+++ b/support/xsysconf.c
@@ -29,7 +29,7 @@ xsysconf (int name)
   int old_errno = errno;
   errno = 0;
   long result = sysconf (name);
-  if (errno != 0)
+  if (result == -1 && errno != 0)
     FAIL_EXIT1 ("sysconf (%d): %m", name);
   errno = old_errno;
   return result;