mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Intercept __memcpy_chk, which appears in glibc-2.6.1. Also fix some
backslash uglyness. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7155
This commit is contained in:
parent
194fd7160a
commit
fd7a6b5363
@ -677,6 +677,50 @@ GLIBC25_MEMPCPY(m_libc_soname, mempcpy)
|
||||
GLIBC25_MEMPCPY(m_ld_so_1, mempcpy) /* ld.so.1 */
|
||||
|
||||
|
||||
#define GLIBC26___MEMCPY_CHK(soname, fnname) \
|
||||
void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
|
||||
(void* dst, const void* src, SizeT len, SizeT dstlen ); \
|
||||
void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
|
||||
(void* dst, const void* src, SizeT len, SizeT dstlen ) \
|
||||
{ \
|
||||
extern void _exit(int status); \
|
||||
register char *d; \
|
||||
register char *s; \
|
||||
\
|
||||
if (dstlen < len) goto badness; \
|
||||
\
|
||||
if (len == 0) \
|
||||
return dst; \
|
||||
\
|
||||
if (is_overlap(dst, src, len, len)) \
|
||||
RECORD_OVERLAP_ERROR("memcpy_chk", dst, src, len); \
|
||||
\
|
||||
if ( dst > src ) { \
|
||||
d = (char *)dst + len - 1; \
|
||||
s = (char *)src + len - 1; \
|
||||
while ( len-- ) { \
|
||||
*d-- = *s--; \
|
||||
} \
|
||||
} else if ( dst < src ) { \
|
||||
d = (char *)dst; \
|
||||
s = (char *)src; \
|
||||
while ( len-- ) { \
|
||||
*d++ = *s++; \
|
||||
} \
|
||||
} \
|
||||
return dst; \
|
||||
badness: \
|
||||
VALGRIND_PRINTF_BACKTRACE( \
|
||||
"*** memcpy_chk: buffer overflow detected ***: " \
|
||||
"program terminated"); \
|
||||
_exit(127); \
|
||||
/*NOTREACHED*/ \
|
||||
return NULL; \
|
||||
}
|
||||
|
||||
GLIBC26___MEMCPY_CHK(m_libc_soname, __memcpy_chk)
|
||||
|
||||
|
||||
/*------------------------------------------------------------*/
|
||||
/*--- Improve definedness checking of process environment ---*/
|
||||
/*------------------------------------------------------------*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user