On Thu, 2014-06-12 at 14:30 +0200, Mark Wielaard wrote:
On Tue, 2014-06-10 at 15:31 +0200, Thilo Schulz wrote:
I was wondering whether we want to check scn->rawdata.s directly, or if we could rely on ELF_F_FILEDATA being set for scn->flags?
Seems reasonable though I don't know the code as well as you do I guess.
I wish I understood the code very well :) But now that I wrote the testcase and you pointed out the second bug, I am not sure of the fix anymore. It does seem to fix the first issue, but then you immediately hit the second.
As a further note: A similar bug, albeit for slightly different reasons, occurs when adding relocations. Adding a relocation with elf_newdata() then elf_update() results in the old data being "forgotten" if there was no elf_getdata() call before to load that data into memory. The cause is a bit different because in this case, there was not a call to elf_rawdata() before and this still happened. I imagine, this might also be a problem for string tables.
Indeed. The attached testcase shows both issues. Calling elf_getdata() and then elf_newdata() works as expected. But elf_newdata drops all existing data when elf_rawdata is called before and elf_newdata keeps the size, but not the actual content bytes of existing data of a section if elf_getdata isn't called before.
Still scratching my head a little how to resolve both issues properly.
Sorry this took 9 months... But I believe these issues have finally been resolved in current git elfutils. At least my testcase now works as expected. Hope it also now works for your code.
Cheers,
Mark