On Tue, 2020-01-28 at 00:33 +0100, Jakub Jelinek wrote:
> Hi!
> 
> libgcrypt FAILs to build on aarch64-linux with
> *** stack smashing detected ***: terminated
> when gcc is compiled with -D_FORTIFY_SOURCE=2.  The problem is if
> fold_array_ctor_reference is called with size equal to or very close to
> MAX_BITSIZE_MODE_ANY_MODE bits and non-zero inner_offset.
> The first native_encode_expr is called with that inner_offset and bufoff 0,
> the subsequent ones with offset of 0, and bufoff elt_size - inner_offset,
> 2 * elt_size - inner_offset etc.  So, e.g. on the testcase where we start
> with inner_offset 1 and size is e.g. 256 bytes and elt_size 4 bytes
> we then call native_encode_expr at bufoff 251 and then 255, but that one
> overwrites 3 bytes beyond the buf array.
> The following patch fixes that.  In addition, it avoids calling
> elt_size.to_uhwi () all the time, and punts if elt_sz would be too large.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> 2020-01-28  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/93454
>       * gimple-fold.c (fold_array_ctor_reference): Perform
>       elt_size.to_uhwi () just once, instead of calling it in every
>       iteration.  Punt if that value is above size of the temporary
>       buffer.  Decrease third native_encode_expr argument when
>       bufoff + elt_sz is above size of buf.
> 
>       * gcc.dg/pr93454.c: New test.
OK
jeff
> 

Reply via email to