util/build-id: check dlpi_name before strstr call

According to dl_iterate_phdr man page first object visited is the
main program where dlpi_name is an empty string. This fixes segfault
on Android when using build-id as identifier.

Fixes: d4fa083e11 ("util: Add utility build-id code.")
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Plamena Manolova <plamena.manolova@intel.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Tapani Pälli 2017-03-16 08:10:57 +02:00
parent 4d4558411d
commit 70d25cae8b
1 changed files with 6 additions and 0 deletions

View File

@ -55,6 +55,12 @@ build_id_find_nhdr_callback(struct dl_phdr_info *info, size_t size, void *data_)
{
struct callback_data *data = data_;
/* The first object visited by callback is the main program.
* Android's libc returns a NULL pointer for the first executable.
*/
if (info->dlpi_name == NULL)
return 0;
char *ptr = strstr(info->dlpi_name, data->filename);
if (ptr == NULL || ptr[strlen(data->filename)] != '\0')
return 0;