[PATCH v2] elf: Check for empty tokens before dynamic string token expansion [BZ #22625]
Florian Weimer
fweimer@redhat.com
Tue Dec 19 13:16:00 GMT 2017
On 12/18/2017 09:42 PM, Aurelien Jarno wrote:
> - return _dl_dst_substitute (l, s, result, is_path);
> + char *retval = _dl_dst_substitute (l, s, result, is_path);
> +
> + /* If substitution of dynamic string tokens resulted to an empty string,
> + return NULL as in case of insufficient memory. */
> + if (__glibc_unlikely (*retval == '\0'))
> + {
> + free (result);
> + return NULL;
> + }
> +
> + return retval;
I'm not really happy with this. OOM and a zero-string expansion are
very different things. We seem to have other abuses in the existing
code, but I don't think we should add further instances.
Furthermore, I'm not sure if the fix is robust enough. There is another
bug in the $ORIGIN DST component skipping: $ORIGIN eats the trailing
colon. This is because this code:
else
{
*wp++ = *name++;
if (is_path && *name == ':')
happens when name is at the ':' after $ORIGIN processing, so only the
next ':' after that (or the end of the string) terminates this
component, and the call to the is_trusted_path_normalize covers two
components mushed together instead of one. So the check likely fails,
and both path elements are skipped. In some cases, this results in an
empty string where it would not usually be non-empty.
Thanks,
Florian
More information about the Libc-alpha
mailing list