From: Alan Modra Date: Mon, 4 May 2020 00:50:54 +0000 (+0930) Subject: readelf: nds32 specific decoding X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9c7b8e9b92696f38ff29efeeb12eb166994c0a23;p=binutils-gdb.git readelf: nds32 specific decoding * readelf.c (process_nds32_specific): Check size of .nds32_e_flags section. Don't assume endian of host matches nds32 target. Free buffer. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 52082fcae12..7b0d1a0477e 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2020-05-04 Alan Modra + + * readelf.c (process_nds32_specific): Check size of .nds32_e_flags + section. Don't assume endian of host matches nds32 target. Free + buffer. + 2020-05-01 Alan Modra Haim Shimonovich diff --git a/binutils/readelf.c b/binutils/readelf.c index 4ceb6b2151f..25c2cce21ae 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -17481,18 +17481,21 @@ process_nds32_specific (Filedata * filedata) Elf_Internal_Shdr *sect = NULL; sect = find_section (filedata, ".nds32_e_flags"); - if (sect != NULL) + if (sect != NULL && sect->sh_size >= 4) { - unsigned int *flag; + unsigned char *buf; + unsigned int flag; printf ("\nNDS32 elf flags section:\n"); - flag = get_data (NULL, filedata, sect->sh_offset, 1, - sect->sh_size, _("NDS32 elf flags section")); + buf = get_data (NULL, filedata, sect->sh_offset, 1, 4, + _("NDS32 elf flags section")); - if (! flag) + if (buf == NULL) return FALSE; - switch ((*flag) & 0x3) + flag = byte_get (buf, 4); + free (buf); + switch (flag & 0x3) { case 0: printf ("(VEC_SIZE):\tNo entry.\n");