Please look at https://bugzilla.redhat.com/show_bug.cgi?id=512840
It has a simple reproducer and data file for it.

Here is the fix suggested by the reporter.  Please commit what fix you
think is right, and check the parallel non-mmap case is OK too.


Thanks,
Roland

>From 6e36a552dab0770c6082aeb054fe8c96ab13834b Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <[email protected]>
Date: Tue, 21 Jul 2009 00:07:48 +0200
Subject: [PATCH] Fix an assert failure with gap between sections

There can be a gap even if the previous section did not change.
Additionally, last_section didn't seem to take the gap into
account, which would result in an assert fail later on.
---
 libelf/elf32_updatefile.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c
index a4d83a1..a5be31d 100644
--- a/libelf/elf32_updatefile.c
+++ b/libelf/elf32_updatefile.c
@@ -336,10 +336,13 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, 
size_t shnum)
 
                /* If there is a gap, fill it.  */
                if (scn_start + dl->data.d.d_off > last_position
-                   && ((previous_scn_changed && dl->data.d.d_off == 0)
+                   && ((dl->data.d.d_off == 0)
                        || ((scn->flags | dl->flags | elf->flags)
                            & ELF_F_DIRTY) != 0))
-                 fill_mmap (dl->data.d.d_off);
+                  {
+                   fill_mmap (dl->data.d.d_off);
+                   last_position = scn_start + dl->data.d.d_off;
+                  }
 
                if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
                  {
-- 
1.6.3.3

_______________________________________________
elfutils-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/elfutils-devel

Reply via email to