Subject: bug#19784: closed (Re: bug#19784: build fails on make-prime-list when asan is enabled)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 05 Feb 2015 18:07:02 +0000

Your bug report

#19784: build fails on make-prime-list when asan is enabled

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
19784: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19784
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#19784: build fails on make-prime-list when asan is enabled
From: Pádraig Brady <[email-masked]>
To: Yury Usishchev <[email-masked]>, [email-masked]
Cc: Vyacheslav Barinov <[email-masked]>,박찬호 <[email-masked]>
Date: Thu, 05 Feb 2015 18:06:34 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

On 05/02/15 15:21, Yury Usishchev wrote:
> Hello!
> 
> We tried to build coreutils with address sanitizer enabled and 
> encountered an error:
> 
>    GEN      src/primes.h
> ==12657== ERROR: AddressSanitizer: heap-buffer-overflow
> 
> This can be reproduced on git master using gcc-4.8 or gcc-4.9 by
> git clone
> export CFLAGS="-fsanitize=address"
> ./bootstrap
> ./configure
> make
> 
> and is caused by line
> src/make-prime-list.c:214:      while (i < size && sieve[++i] == 0)
> 
> When 'i' reaches 'size-1' it gets incremented and then 
> (unallocated)memory is accessed.
> 
> I attached patch that can fix this issue.

Oh nice one. That was not rerun when I ran my checks.
The released tools (still) pass with -fsanitize=address.

How about this fix instead?  I'll push in your name if
you're ok with it.

diff --git a/src/make-prime-list.c b/src/make-prime-list.c
index 68c972a..69b91e8 100644
--- a/src/make-prime-list.c
+++ b/src/make-prime-list.c
@@ -211,7 +211,7 @@ main (int argc, char **argv)
       for (j = (p*p - 3)/2; j < size; j+= p)
         sieve[j] = 0;

-      while (i < size && sieve[++i] == 0)
+      while (++i < size && sieve[i] == 0)
         ;
     }

Subject: build fails on make-prime-list when asan is enabled
From: Yury Usishchev <[email-masked]>
To: [email-masked]
Cc: Vyacheslav Barinov <[email-masked]>,박찬호 <[email-masked]>
Date: Thu, 05 Feb 2015 18:21:06 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello!

We tried to build coreutils with address sanitizer enabled and 
encountered an error:

   GEN      src/primes.h
==12657== ERROR: AddressSanitizer: heap-buffer-overflow

This can be reproduced on git master using gcc-4.8 or gcc-4.9 by
git clone
export CFLAGS="-fsanitize=address"
./bootstrap
./configure
make

and is caused by line
src/make-prime-list.c:214:      while (i < size && sieve[++i] == 0)

When 'i' reaches 'size-1' it gets incremented and then 
(unallocated)memory is accessed.

I attached patch that can fix this issue.

-- 
BR,
Yury Usishchev

diff --git a/src/make-prime-list.c b/src/make-prime-list.c
index 4ec01cf..d293e50 100644
--- a/src/make-prime-list.c
+++ b/src/make-prime-list.c
@@ -195,8 +195,8 @@ main (int argc, char **argv)
 
   size = (limit-1)/2;
   /* sieve[i] represents 3+2*i */
-  sieve = xalloc (size);
-  memset (sieve, 1, size);
+  sieve = xalloc (size+1);
+  memset (sieve, 1, size+1);
 
   prime_list = xalloc (size * sizeof (*prime_list));
   nprimes = 0;