summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Ch. Eigler <[email protected]>2025-02-18 22:09:12 -0500
committerFrank Ch. Eigler <[email protected]>2025-02-18 22:09:52 -0500
commita71bac67f4705b84368b71f5ece54deedaa1abf1 (patch)
tree30d5cb1bbad9d2a49dc02177f1c757322ab227a0
parentb16f441cca0a4841050e3215a9f120a6d8aea918 (diff)
debuginfod-client: correct invalid free() in failed ima path
debuginfod-find with a failed signature configuration was found on f41 glibc (2.40) to sometimes leave invalid addresses in a sscanf("%ms", &ptr) pointer in case of error, leading to an invalid free() during cleanup. We now clear that ptr manually, making valgrind happy. Unclear why this hasn't shown up in testsuite testing. ==1098106== Invalid free() / delete / delete[] / realloc() ==1098106== at 0x4844B83: free (vg_replace_malloc.c:989) ==1098106== by 0x49647A2: ??? (in /usr/lib64/libdebuginfod-0.192.so) ==1098106== by 0x401528: main (debuginfod-find.c:209) ==1098106== Address 0xc8 is not stack'd, malloc'd or (recently) free'd Signed-off-by: Frank Ch. Eigler <[email protected]>
-rw-r--r--debuginfod/debuginfod-client.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index d89beae9..4152b06a 100644
--- a/debuginfod/debuginfod-client.c
+++ b/debuginfod/debuginfod-client.c
@@ -1599,6 +1599,7 @@ debuginfod_validate_imasig (debuginfod_client *c, int fd)
if (!hdr_ima_sig || 1 != sscanf(hdr_ima_sig + strlen("x-debuginfod-imasignature:"), "%ms", &sig_buf))
{
rc = -ENODATA;
+ sig_buf = NULL; // f41 glibc may litter here in case of sscanf error
goto exit_validate;
}
if (strlen(sig_buf) > MAX_SIGNATURE_SIZE) // reject if too long