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

            Bug ID: 381299
           Summary: false uninit on new page via sbrk(n)
           Product: valgrind
           Version: 3.13 SVN
          Platform: Compiled Sources
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: memcheck
          Assignee: jsew...@acm.org
          Reporter: jrei...@bitwagon.com
  Target Milestone: ---

Memcheck generates a false positive uninitialized complaint when the target
program uses a value from a new page that was [just] allocated via sbrk(n). 
The operating system guarantees that new pages are all zero, so memcheck should
not complain.

===== vg-brk.c test case
#include <stdio.h>
#include <unistd.h>

#define PAGE_SIZE (1u<<12)
#define PAGE_MASK -PAGE_SIZE

int
main(int argc, char *argv[])
{
        void *p0 = sbrk(0);
        printf("p0=%p  from sbrk(0)\n", p0);
        void *p1 = (void *)(PAGE_MASK & (-1+ PAGE_SIZE + (long)p0));
        int r1 = brk(p1);
        printf("p1=%p  p0 rounded up to page boundary  r1=%d\n", p1, r1);
        void *p2 = sbrk(0x1000);
        printf("p2=%p  new page was allocated here\n", p2);
        void *p3 = sbrk(0x1000);
        printf("p3=%p  new page was allocated here\n", p3);
        printf("\n");
        printf("will access %p\n", p2);
        printf("%d\n", *(int *)p2);
        return 0;
}
=====

$ gcc -g -o vg-brk vg-brk.c
$ valgrind-3.13.0/bin/valgrind --track-origins=yes ./vg-brk
==18003== Memcheck, a memory error detector
==18003== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==18003== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==18003== Command: ./vg-brk
==18003== 
p0=0x4228000  from sbrk(0)
p1=0x4228000  p0 rounded up to page boundary  r1=0
p2=0x4228000  new page was allocated here
p3=0x4229000  new page was allocated here

will access 0x4228000
==18003== Conditional jump or move depends on uninitialised value(s)
==18003==    at 0x4E8844A: vfprintf (in /usr/lib64/libc-2.24.so)
==18003==    by 0x4E906D8: printf (in /usr/lib64/libc-2.24.so)
==18003==    by 0x4006C2: main (vg-brk.c:21)
==18003==  Uninitialised value was created
==18003==    at 0x4F37579: brk (in /usr/lib64/libc-2.24.so)
==18003==    by 0x4F37658: sbrk (in /usr/lib64/libc-2.24.so)
==18003==    by 0x40064D: main (vg-brk.c:15)
==18003== 
  [[snip]]

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

Reply via email to