This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
--Douglas Rupp AdaCorePatch attached for errors found with valgrind while working on arm-wrs-vxworks-ld, e.g.:
==13043== Invalid read of size 1 ==13043== at 0x4935A2: iterative_hash (hashtab.c:974) ... ==13043== Address 0x66e0e1b is not stack'd, malloc'd or (recently) free'dIt's not specific to arm-wrs-vxworks. The problem is there's a path through elf-eh-frame.c/skip_non_nops() that doesn't set the return value properly, and leaves it off by 1. Later on this value, which should be 0, causes a problem is in this bit of code also in bfd/elf-eh-frame.c:
insns_end = skip_non_nops (insns, end, length, &set_loc_count); ... this_inf->size -= end - insns_end; if (insns_end != end && this_inf->cie) { cie->initial_insn_length -= end - insns_end; cie->length -= end - insns_end; }If cie->initial_insn_length is 0, the subtraction underflows to 255 which is a bogus value. When the hashing function gets ahold of the value, it starts reading unallocated memory.
Attachment:
nops.diff.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |