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

From: Yury Usishchev <[email-masked]>
Date: Thu, 05 Feb 2015 22:29:51 +0300

On 02/05/2015 09:06 PM, Pádraig Brady wrote:
> 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)
>           ;
>       }
Thank you for quick reply.
Yes, this patch looks much better.

-- 
BR,
Yury Usishchev