invalid read in mpn_copyi?

Emmanuel Thomé emmanuel.thome at gmail.com
Tue Jan 21 21:24:35 UTC 2014


Hi,

The options --gen-suppressions and --suppressions to valgrind might be
of some use.

I'll let others answers as to whether or not the issue you encounter
is indeed a bug. I _think_ that this same thing popped up earlier, and
indeed it's an expected off-bound read caused by an sse2 load --
harmless.

Best,

E.



On Tue, Jan 21, 2014 at 9:46 PM, David Harvey <d.harvey at unsw.edu.au> wrote:
> hi,
>
> I'm not sure if the following is considered a bug. (This was picked up by Andrew Sutherland.)
>
> The implementation of mpn_copyi in mpn/x86_64/core2/copyi.asm (GMP 5.1.3) generates invalid reads in certain circumstances, according to valgrind.
>
> Here is the code:
>
> ========================================================
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <gmp.h>
>
> int main(int argc, char* argv[])
> {
>   long trial;
>   mp_limb_t* src;
>   mp_limb_t dest[13];
>
>   /* try to get malloc to allocate a block of 13 * 8 bytes,
>      aligned at 0x70 */
>
>   for (trial = 0; trial < 10000; trial++)
>     {
>       src = (mp_limb_t*) malloc(13 * sizeof(mp_limb_t));
>
>       if ((((long) src) & 0xff) == 0x70)
>         {
>           /* this line generates invalid read at src + 13 */
>           mpn_copyi(dest, src + 5, 8);
>           return 0;
>         }
>     }
>
>   printf("could not get malloc'd block with desired alignment\n");
>   return 0;
> }
>
> ========================================================
>
> This runs as normal with no crashes.
>
> However, when I run under valgrind I get:
>
> ==7858== Invalid read of size 8
> ==7858==    at 0x4C64106: __gmpn_copyi (in /home/z2232064/temp/local/lib/libgmp.so.10.1.3)
> ==7858==    by 0x3E6281ECDC: (below main) (in /lib64/libc-2.12.so)
> ==7858==  Address 0x4e996d8 is 0 bytes after a block of size 104 alloc'd
> ==7858==    at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
> ==7858==    by 0x40067F: main (in /home/z2232064/temp/thing)
>
> I can see why this might be considered a non-bug, and perhaps it's even intentional for performance reasons, but it seemed dodgy enough to me to report it.
>
> At the very least it makes it difficult to a debug a program with a tool like valgrind. We ended up rolling back to a previous version of GMP that did not exhibit this behaviour, so that we could eliminate the white noise.
>
> david
>
> _______________________________________________
> gmp-bugs mailing list
> gmp-bugs at gmplib.org
> https://gmplib.org/mailman/listinfo/gmp-bugs


More information about the gmp-bugs mailing list