From 97a83aba3bc6376786984efde3e4a968fe553068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rubens=20Brand=C3=A3o?= Date: Thu, 15 Feb 2024 12:13:46 -0300 Subject: [PATCH] feature(libqasan): add strndup (#1860) * feature(libqasan): add asprintf and vasprintf * feature(libqasan): add asprintf and vasprintf to hotpatch * feature(libqasan): add strndup --- libafl_qemu/libqasan/hooks.c | 15 +++++++++++++++ libafl_qemu/libqasan/patch.c | 1 + 2 files changed, 16 insertions(+) diff --git a/libafl_qemu/libqasan/hooks.c b/libafl_qemu/libqasan/hooks.c index 8b27bb8094..c16b0a8250 100644 --- a/libafl_qemu/libqasan/hooks.c +++ b/libafl_qemu/libqasan/hooks.c @@ -471,6 +471,21 @@ char *strdup(const char *s) { return r; } +char *strndup(const char *s, size_t n) { + void *rtv = __builtin_return_address(0); + + QASAN_DEBUG("%14p: strndup(%p, %zu)\n", rtv, s, n); + size_t l = __libqasan_strnlen(s, n); + if (l > n) { l = n; } + QASAN_LOAD(s, l + 1); + void *r = __libqasan_malloc(l + 1); + __libqasan_memcpy(r, s, l); + ((char*)r)[l] = 0; + QASAN_DEBUG("\t\t = %p\n", r); + + return r; +} + size_t strlen(const char *s) { void *rtv = __builtin_return_address(0); diff --git a/libafl_qemu/libqasan/patch.c b/libafl_qemu/libqasan/patch.c index 03c9ac2672..443c5a9b76 100644 --- a/libafl_qemu/libqasan/patch.c +++ b/libafl_qemu/libqasan/patch.c @@ -214,6 +214,7 @@ void __libqasan_hotpatch(void) { HOTPATCH(strncpy) HOTPATCH(stpcpy) HOTPATCH(strdup) + HOTPATCH(strndup) HOTPATCH(strlen) HOTPATCH(strnlen) HOTPATCH(strstr)