libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Libunwind-devel] coredump: NOTE_SIZE alignment bug


From: Willeke, Jan (Hays)
Subject: [Libunwind-devel] coredump: NOTE_SIZE alignment bug
Date: Mon, 30 May 2016 11:28:13 +0000

binutily readelf.c core snap:
    
next = inote.descdata + align_power (inote.descsz, 2);
    
this align is missing, leading to parsing errors. In my case libunwind only found 1 thread out of 4.
    
Signed-off-by: Jan Willeke <address@hidden>


diff --git a/src/coredump/_UCD_create.c b/src/coredump/_UCD_create.c
index ceb455d..601cb4d 100644
--- a/src/coredump/_UCD_create.c
+++ b/src/coredump/_UCD_create.c
@@ -67,7 +67,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 #include "_UCD_internal.h"
 
 #define NOTE_DATA(_hdr) STRUCT_MEMBER_P((_hdr), sizeof (Elf32_Nhdr) + UNW_ALIGN((_hdr)->n_namesz, 4))
-#define NOTE_SIZE(_hdr) (sizeof (Elf32_Nhdr) + UNW_ALIGN((_hdr)->n_namesz, 4) + (_hdr)->n_descsz)
+#define NOTE_SIZE(_hdr) (sizeof (Elf32_Nhdr) + UNW_ALIGN((_hdr)->n_namesz, 4) + UNW_ALIGN((_hdr)->n_descsz, 4))
 #define NOTE_NEXT(_hdr) STRUCT_MEMBER_P((_hdr), NOTE_SIZE(_hdr))
 #define NOTE_FITS_IN(_hdr, _size) ((_size) >= sizeof (Elf32_Nhdr) && (_size) >= NOTE_SIZE (_hdr))
 #define NOTE_FITS(_hdr, _end) NOTE_FITS_IN((_hdr), (unsigned long)((char *)(_end) - (char *)(_hdr)))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]