Hi Max,
Max Filippov wrote,

> Loops with 'loop forever' annotation inside strcmp are actually meant to
> loop forever. Falling through the end of the first loop may result in
> equal strings being compared unequal, e.g.:
> 
>       #include <string.h>
> 
>       int main(void)
>       {
>               char a[4096] __attribute__((aligned(4)));
>               char b[4096] __attribute__((aligned(4)));
> 
>               memset(a, ' ', 258 * 8);
>               memset(b, ' ', 258 * 8);
>               a[255 * 8] = 0;
>               a[256 * 8] = 'a';
>               b[255 * 8] = 0;
>               b[256 * 8] = 'b';
>               return !(strcmp(a, b) == 0);
>       }
> 
> Falling through the end of the second loop may result in unequal strings
> being compared as equal, e.g.:
> 
>       #include <string.h>
> 
>       int main(void)
>       {
>               char a[4096] __attribute__((aligned(4)));
>               char b[4096] __attribute__((aligned(4)));
> 
>               memset(a, ' ', 514 * 6);
>               memset(b, ' ', 514 * 6);
>               a[514 * 6 + 0] = 'a';
>               a[514 * 6 + 1] = 0;
>               b[514 * 6 + 0] = 'b';
>               b[514 * 6 + 1] = 0;
>               return !(strcmp(a, b) != 0);
>       }
> 
> Use 0 as a loop counter to make 2^32 - 1 iterations which is enough to
> cover all addressable memory. While at it drop useless nop at the end of
> the first loop and use a11 for all loop counters.
> 
> Signed-off-by: Max Filippov <jcmvb...@gmail.com>
> ---
> Changes v1->v2:
> - wrong test case for the second loop, fixed.
> 

Applied and pushed,
 thx
  Waldemar
_______________________________________________
devel mailing list
devel@uclibc-ng.org
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel

Reply via email to