On 02/01/2019 10:43, Wei Liu wrote:
> On Mon, Dec 31, 2018 at 05:34:25PM +0000, Andrew Cooper wrote:
>> A NT_GNU_BUILD_ID with namesz longer than 4 will cause the strncmp() to use
>> bytes in adjacent stringtable entries.
>>
>> Instead, check for namesz exactly equal to 4, and use memcmp() with an
>> explicit size.
>>
>> Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com>
>> ---
>> CC: Jan Beulich <jbeul...@suse.com>
>> CC: Wei Liu <wei.l...@citrix.com>
>> CC: Roger Pau Monné <roger....@citrix.com>
>> CC: Stefano Stabellini <sstabell...@kernel.org>
>> CC: Julien Grall <julien.gr...@arm.com>
>>
>> Noticed while auditing Xen's use of strncmp() for the command line patch.
>> ---
>>  xen/common/version.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/xen/common/version.c b/xen/common/version.c
>> index 223cb52..1df7e78 100644
>> --- a/xen/common/version.c
>> +++ b/xen/common/version.c
>> @@ -97,17 +97,17 @@ int xen_build_id_check(const Elf_Note *n, unsigned int 
>> n_sz,
>>      if ( NT_GNU_BUILD_ID != n->type )
>>          return -ENODATA;
>>  
>> -    if ( n->namesz + n->descsz < n->namesz )
>> +    if ( n->namesz != 4 /* GNU\0 */)
>>          return -EINVAL;
>>  
>> -    if ( n->namesz < 4 /* GNU\0 */)
>> +    if ( n->namesz + n->descsz < n->namesz )
> The reordering of two predicates doesn't seem to serve any particular
> purpose? You could've just changed "<" to "!=" for less code churn?

Logically, the != 4 check should be ahead of the truncation check, but
yes - patch did collapse it into something rather harder to read in this
case.

>
>>          return -EINVAL;
>>  
>>      if ( n->namesz + n->descsz > n_sz - sizeof(*n) )
>>          return -EINVAL;
>>  
>>      /* Sanity check, name should be "GNU" for ld-generated build-id. */
>> -    if ( strncmp(ELFNOTE_NAME(n), "GNU", n->namesz) != 0 )
>> +    if ( memcmp(ELFNOTE_NAME(n), "GNU", 4) != 0 )
> OOI what is the advantage of memcmp compared to strncmp?

Erm.  I suppose in this exact case, personal preference.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to