Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5041927.IR2Ri05J2P@linuix>
Date: Tue, 19 Jun 2012 12:45:50 +0200
From: Bruno Haible <bruno@...sp.org>
To: bug-gnulib@....org
Cc: Rich Felker <dalias@...ifal.cx>, musl@...ts.openwall.com, Isaac Dunham <idunham@...abit.com>
Subject: Re: musl, printf out-of-memory test

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  <bruno@...sp.org>

	*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

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.