[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