]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix for bug #80942.
authorNicholas Nethercote <n.nethercote@gmail.com>
Wed, 5 May 2004 10:46:22 +0000 (10:46 +0000)
committerNicholas Nethercote <n.nethercote@gmail.com>
Wed, 5 May 2004 10:46:22 +0000 (10:46 +0000)
Addrcheck wasn't doing overlap checking as it should.  This is because
mac_replace_strmem.o was being linked with vgskin_addrcheck.so instead of
vgpreload_addrcheck.so.  I fixed the Makefile, and also moved
_VG_USERREQ__MEMCHECK_GET_RECORD_OVERLAP so Addrcheck could see it.  And I
added the 'overlap' test (from memcheck/tests/) to Addrcheck's regression
suite.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2394

addrcheck/Makefile.am
addrcheck/tests/Makefile.am
addrcheck/tests/overlap.stderr.exp [new file with mode: 0644]
addrcheck/tests/overlap.stdout.exp [new file with mode: 0644]
addrcheck/tests/overlap.vgtest [new file with mode: 0644]
memcheck/mac_needs.c
memcheck/mc_clientreqs.c

index 4c12457566f6660cacb11c8ef9dd462cf1158a0f..3c86d5bac0616500c8b48197fb3ba750d798f08e 100644 (file)
@@ -17,12 +17,15 @@ vgskin_addrcheck_so_LDFLAGS = -shared
 vgskin_addrcheck_so_LDADD = \
        ../memcheck/mac_leakcheck.o \
        ../memcheck/mac_malloc_wrappers.o \
-       ../memcheck/mac_needs.o \
-       ../memcheck/mac_replace_strmem.o
+       ../memcheck/mac_needs.o
 
 vgpreload_addrcheck_so_SOURCES = 
-vgpreload_addrcheck_so_LDADD = $(top_builddir)/coregrind/vg_replace_malloc.o
-vgpreload_addrcheck_so_DEPENDENCIES = $(top_builddir)/coregrind/vg_replace_malloc.o
+vgpreload_addrcheck_so_LDADD = \
+       $(top_builddir)/coregrind/vg_replace_malloc.o \
+       ../memcheck/mac_replace_strmem.o
+vgpreload_addrcheck_so_DEPENDENCIES = \
+       $(top_builddir)/coregrind/vg_replace_malloc.o \
+       ../memcheck/mac_replace_strmem.o
 vgpreload_addrcheck_so_LDFLAGS = -shared -Wl,-z,interpose,-z,initfirst
 
 all-local:
index 7eca180f7a03ae263d06afe5d7d9baa21eab7267..a05a457317ac887929eed3eb4aabe6d0a7747b68 100644 (file)
@@ -8,4 +8,5 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        insn_basic.vgtest insn_cmov.vgtest insn_mmx.vgtest \
        $(addsuffix .stderr.exp,$(INSN_TESTS)) \
        $(addsuffix .stdout.exp,$(INSN_TESTS)) \
-       $(addsuffix .vgtest,$(INSN_TESTS))
+       $(addsuffix .vgtest,$(INSN_TESTS)) \
+       overlap.stderr.exp overlap.stdout.exp overlap.vgtest
diff --git a/addrcheck/tests/overlap.stderr.exp b/addrcheck/tests/overlap.stderr.exp
new file mode 100644 (file)
index 0000000..6fcbcd1
--- /dev/null
@@ -0,0 +1,27 @@
+Source and destination overlap in memcpy(0x........, 0x........, 21)
+   at 0x........: memcpy (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:40)
+
+Source and destination overlap in memcpy(0x........, 0x........, 21)
+   at 0x........: memcpy (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:42)
+
+Source and destination overlap in strncpy(0x........, 0x........, 21)
+   at 0x........: strncpy (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:45)
+
+Source and destination overlap in strncpy(0x........, 0x........, 21)
+   at 0x........: strncpy (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:47)
+
+Source and destination overlap in strcpy(0x........, 0x........)
+   at 0x........: strcpy (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:54)
+
+Source and destination overlap in strncat(0x........, 0x........, 21)
+   at 0x........: strncat (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:112)
+
+Source and destination overlap in strncat(0x........, 0x........, 21)
+   at 0x........: strncat (mac_replace_strmem.c:...)
+   by 0x........: main (overlap.c:113)
diff --git a/addrcheck/tests/overlap.stdout.exp b/addrcheck/tests/overlap.stdout.exp
new file mode 100644 (file)
index 0000000..12cb02e
--- /dev/null
@@ -0,0 +1,11 @@
+`_________________________________________________'
+`abcdefghijklmnopqrstuvwxyz'
+`abcdefghijklmnopqrstuvwxy________________________'
+`abcdefghijklmnopqrstuvwxyz_______________________'
+`abcdefghijklmnopqrstuvwxyz'
+
+`ABCDEFG'
+`ABCDEFGabcdefghijklmnopqrstuvwxyz'
+`ABCDEFGabcdefghijklmnopqrstuvwxy'
+`ABCDEFGabcdefghijklmnopqrstuvwxyz'
+`ABCDEFGabcdefghijklmnopqrstuvwxyz'
diff --git a/addrcheck/tests/overlap.vgtest b/addrcheck/tests/overlap.vgtest
new file mode 100644 (file)
index 0000000..da96655
--- /dev/null
@@ -0,0 +1,2 @@
+vgopts: -q
+prog: ../../memcheck/tests/overlap
index 243b163a0052822fa4b8e2a33c860cdc5046fc60..3c7c616a5f8e8408482714ff10ac713c582e02c0 100644 (file)
@@ -873,6 +873,10 @@ Bool MAC_(handle_common_client_requests)(ThreadId tid, UInt* arg, UInt* ret )
       return True;
    }
 
+   case _VG_USERREQ__MEMCHECK_GET_RECORD_OVERLAP:
+      *ret = (Addr)MAC_(record_overlap_error);
+      return True;
+
    default:
       return False;
    }
index 54ab99bffe9a6979e50d057d3a61d576f299fbc4..9f383f6eafed10c50f34932983ce93f94ff36b39 100644 (file)
@@ -232,10 +232,6 @@ Bool SK_(handle_client_request) ( ThreadId tid, UInt* arg, UInt* ret )
                    ( tid, arg[1], arg[2], arg[3], True /* set them */ );
          break;
 
-      case _VG_USERREQ__MEMCHECK_GET_RECORD_OVERLAP:
-        *ret = (Addr)MAC_(record_overlap_error);
-        break;
-
       default:
          if (MAC_(handle_common_client_requests)(tid, arg, ret )) {
             return True;