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 <fche@redhat.com>
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