https://bugs.kde.org/show_bug.cgi?id=441109

            Bug ID: 441109
           Summary: [ARM64] Invalid write of size 8 when it's really 16
           Product: valgrind
           Version: unspecified
          Platform: Compiled Sources
                OS: Linux
            Status: REPORTED
          Severity: minor
          Priority: NOR
         Component: memcheck
          Assignee: jsew...@acm.org
          Reporter: n...@thatsmathematics.com
  Target Milestone: ---

On ARM64, 16-byte store instructions such as `str q0, [...]` or `stp x1, x2,
[...]` are reported as "Invalid write of size 8".  Likewise for 32-byte store
`stp q0, q1, [...]` and probably also longer stores like `st1`.

Example:

include <stdlib.h>
int main(void) {
    char *ptr = malloc(256);
    ptr += 256;
    asm volatile ("fmov d0, #1.5 ; str q0, [%0]"
                  :
                  : "r" (ptr)
                  : "q0", "memory");
    return 0;
}

`valgrind ./a.out` prints out:

==16170== Invalid write of size 8
==16170==    at 0x1087BC: main (in /home/nate/bugs/valgrind/a.out)
==16170==  Address 0x49ec140 is 0 bytes after a block of size 256 alloc'd
==16170==    at 0x484F058: malloc (vg_replace_malloc.c:380)
==16170==    by 0x1087A3: main (in /home/nate/bugs/valgrind/a.out)

I expected "Invalid write of size 16".

Reproduced with latest 3.18.0 from git, as well as 3.17.0 from Ubuntu 21.04
package.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to