[PATCH] ld.so: Check for new cache format first and enhance corruption check
Florian Weimer
fweimer@redhat.com
Tue May 19 14:51:20 GMT 2020
* Andreas Schwab:
> On Mai 19 2020, Florian Weimer via Libc-alpha wrote:
>
>> Now that ldconfig defaults to the new format (only), check for it
>> first. Also apply the corruption check added in commit 2954daf00bb4d
>> ("Add more checks for valid ld.so.cache file (bug 18093)") to the
>> new-format-only case.
>
> Ok.
So the patch is okay to push? Thanks.
>> diff --git a/elf/dl-cache.c b/elf/dl-cache.c
>> index 3eedd9afcf..14691d3d2b 100644
>> --- a/elf/dl-cache.c
>> +++ b/elf/dl-cache.c
>> @@ -199,11 +199,21 @@ _dl_load_cache_lookup (const char *name)
>> PROT_READ);
>>
>> /* We can handle three different cache file formats here:
>> + - only the new format
>> - the old libc5/glibc2.0/2.1 format
>> - the old format with the new format in it
>> - - only the new format
>> The following checks if the cache contains any of these formats. */
>> - if (file != MAP_FAILED && cachesize > sizeof *cache
>> + if (file != MAP_FAILED && cachesize > sizeof *cache_new
>> + && memcmp (file, CACHEMAGIC_VERSION_NEW,
>> + sizeof CACHEMAGIC_VERSION_NEW - 1) == 0
>
> Wrong indent.
Oh, sorry. Like this?
if (file != MAP_FAILED && cachesize > sizeof *cache_new
&& memcmp (file, CACHEMAGIC_VERSION_NEW,
sizeof CACHEMAGIC_VERSION_NEW - 1) == 0
/* Check for corruption, avoiding overflow. */
&& ((cachesize - sizeof *cache_new) / sizeof (struct file_entry_new)
>= ((struct cache_file_new *) file)->nlibs))
Thanks,
Florian
More information about the Libc-alpha
mailing list