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:
Julian Seward 2007-11-13 20:52:29 +00:00
parent 194fd7160a
commit fd7a6b5363

View File

@ -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 ---*/
/*------------------------------------------------------------*/