bug-gnulib
[Top][All Lists]
Advanced

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

Re: musl, printf out-of-memory test


From: Bruno Haible
Subject: Re: musl, printf out-of-memory test
Date: Tue, 19 Jun 2012 12:45:50 +0200
User-agent: KMail/4.7.4 (Linux/3.1.10-1.9-desktop; KDE/4.7.4; x86_64; ; )

Rich Felker wrote:
> > Replacements of *printf, because of
> > [...]
> >   checking whether printf survives out-of-memory conditions... no
> 
> No idea. Copying out the test and running it directly, it passes just
> fine for me. Maybe gnulib has already replaced printf with its own
> malloc-using version by the time it gets to this test??

Strange indeed. With a testdir of all of gnulib, I got

  configure:17615: checking whether printf survives out-of-memory conditions
  configure:17786: /arch/x86-linux/inst-musl/bin/musl-gcc -std=gnu99 -o 
conftest -g -O2 -Wall  conftest.c  >&5
  configure:17789: $? = 0
  configure:17837: result: yes

but with a testdir of only the POSIX related modules of gnulib, I got

  configure:13657: checking whether printf survives out-of-memory conditions
  configure:13828: /arch/x86-linux/inst-musl/bin/musl-gcc -std=gnu99 -o 
conftest -g -O2 -Wall  conftest.c  >&5
  configure:13831: $? = 0
  configure:13879: result: no

The '$? = 0' line prints only the linker's exit code, not the runtime
exit code. I'm adding a second output line for the runtime exit code.
Then I get:

  configure:8919: checking whether printf survives out-of-memory conditions
  configure:9090: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 
-Wall  conftest.c  >&5
  configure:9093: $? = 0
  configure:9097: $? = 1
  configure:9142: result: no

After adding a printf to stderr: Once I get

  configure:8919: checking whether printf survives out-of-memory conditions
  configure:9093: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 
-Wall  conftest.c  >&5
  configure:9096: $? = 0
  printf's return value = 5000002, errno = 0
  configure:9100: $? = 0
  configure:9145: result: yes

In another configure run I get:

  configure:8919: checking whether printf survives out-of-memory conditions
  configure:9093: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 
-Wall  conftest.c  >&5
  configure:9096: $? = 0
  configure:9100: $? = 1
  configure:9145: result: no

So, the exit code 1 must have come from the crash handler. Without this crash
handler: 7x I get

  configure:8919: checking whether printf survives out-of-memory conditions
  configure:8979: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 
-Wall  conftest.c  >&5
  configure:8982: $? = 0
  printf's return value = 5000002, errno = 0
  configure:8986: $? = 0
  configure:9031: result: yes

but once I get

  configure:8979: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 
-Wall  conftest.c  >&5
  configure:8982: $? = 0
  configure:8986: $? = 139
  configure:9031: result: no

So, apparently, under memory stress, musl's printf has a probability of
between 10% and 50% of crashing with SIGSEGV (139 = 128 + 11).

Bruno


2012-06-19  Bruno Haible  <address@hidden>

        *printf-posix: Put more info into config.log.
        * m4/printf.m4 (gl_PRINTF_ENOMEM): Emit conftest's error output and
        exit code into config.log.

--- m4/printf.m4.orig   Tue Jun 19 12:41:56 2012
+++ m4/printf.m4        Tue Jun 19 12:41:53 2012
@@ -1,4 +1,4 @@
-# printf.m4 serial 48
+# printf.m4 serial 49
 dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -1028,8 +1028,9 @@
 changequote([,])dnl
           ])])
           if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
-            (./conftest
+            (./conftest 2>&AS_MESSAGE_LOG_FD
              result=$?
+             _AS_ECHO_LOG([\$? = $result])
              if test $result != 0 && test $result != 77; then result=1; fi
              exit $result
             ) >/dev/null 2>/dev/null




reply via email to

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