From: Lennart Poettering Date: Tue, 10 Aug 2021 12:37:00 +0000 (+0200) Subject: memory-util: add mempmem_safe() X-Git-Tag: v250-rc1~847^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d8782cc5c22d83f4a4305f40d85a84f47c89f314;p=thirdparty%2Fsystemd.git memory-util: add mempmem_safe() This is like memmem_safe() but returns a pointer after the needle, instead to the beginning of the needle. This is then used at one place. Not much, but it makes me sleep safer at night, as it avoids the manual counting done so far. --- diff --git a/src/basic/memory-util.h b/src/basic/memory-util.h index 0b04278ab47..e2b543cb8f2 100644 --- a/src/basic/memory-util.h +++ b/src/basic/memory-util.h @@ -71,6 +71,16 @@ static inline void *memmem_safe(const void *haystack, size_t haystacklen, const return memmem(haystack, haystacklen, needle, needlelen); } +static inline void *mempmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) { + const uint8_t *p; + + p = memmem_safe(haystack, haystacklen, needle, needlelen); + if (!p) + return NULL; + + return (uint8_t*) p + needlelen; +} + #if HAVE_EXPLICIT_BZERO static inline void* explicit_bzero_safe(void *p, size_t l) { if (l > 0) diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 264189c36b9..9283e2013cf 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -159,10 +159,9 @@ static int get_file_version(int fd, char **v) { if (buf == MAP_FAILED) return log_error_errno(errno, "Failed to memory map EFI binary: %m"); - s = memmem(buf, st.st_size - 8, "#### LoaderInfo: ", 17); + s = mempmem_safe(buf, st.st_size - 8, "#### LoaderInfo: ", 17); if (!s) goto finish; - s += 17; e = memmem(s, st.st_size - (s - buf), " ####", 5); if (!e || e - s < 3) {