[PATCH] readelf robustification (part N)
Nick Clifton
nickc@redhat.com
Thu Jun 16 09:39:00 GMT 2005
Hi Jakub,
> 2005-06-14 Jakub Jelinek <jakub@redhat.com>
>
> * readelf.c (CHECK_ENTSIZE_VALUES, CHECK_ENTSIZE): Define.
> (process_section_headers): Use it.
> (process_relocs): Don't crash if symsec is not SHT_SYMTAB
> or SHT_DYNSYM.
> (process_version_sections): Use 2 instead of sh_entsize.
This is mostly OK, but:
> +#define CHECK_ENTSIZE_VALUES(section, i, size32, size64) \
> + do { \
> + size_t expected_entsize \
> + = is_32bit_elf ? size32 : size64; \
> + if (section->sh_entsize != expected_entsize) \
> + error (_("Section %d has invalid sh_entsize %lx (expected %lx)\n"), \
> + i, (unsigned long int) section->sh_entsize, \
> + (unsigned long int) expected_entsize); \
> + section->sh_entsize = expected_entsize; \
> + } while (0)
Formatting. Just because this is a macro there is no reason to abandon
the GNU Coding standard. Please treat the macro like ordinary code and
break out the curly braces to their own lines.
> + else if (section->sh_type == SHT_GROUP)
> + CHECK_ENTSIZE_VALUES (section, i, 4, 4);
I am slightly worried about the appearance of the "4" here. I do not
like magic constants in code, although I see that "4" has been used in
this context elsewhere in the readelf sources. I would be much happier
if we had a macro value here instead. eg:
#define GROUP_ENTRY_SIZE 4
Then this could be used elsewhere in the group processing code as well.
> - total = section->sh_size / section->sh_entsize;
> + total = section->sh_size / 2;
I am worried by this "2" as well. If you are concerned that sh_entsize
might be invalid here, shouldn't you be checking it ? Also I see that
the code further on uses "sizeof (short)" instead of "2", but this seems
unsafe to me, since there is no guarantee that the size of a short on
the system running readelf is 2. (It might be 1 on a 16-bit host...)
I think that we need another defined constant here (eg
VERSYM_ENTRY_SIZE) and a check to make size that "sizeof (*data) >=
VERSYM_ENTRY_SIZE".
Cheers
Nick
More information about the Binutils
mailing list