+2021-12-16 Mark Wielaard <mark@klomp.org>
+
+ * dwfl_segment_report_module.c (dwfl_segment_report_module): Check
+ note data is properly aligned.
+
2021-12-16 Mark Wielaard <mark@klomp.org>
* link_map.c (dwfl_link_map_report): Make sure phnum is non-zero.
assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
void *notes;
- if (ei_data == MY_ELFDATA)
+ if (ei_data == MY_ELFDATA
+ && (uintptr_t) data == (align == 8
+ ? NOTE_ALIGN8 ((uintptr_t) data)
+ : NOTE_ALIGN4 ((uintptr_t) data)))
notes = data;
else
{
+2021-12-16 Mark Wielaard <mark@klomp.org>
+
+ * libelfP.h (NOTE_ALIGN4): And with negative unsigned long.
+ (NOTE_ALIGN8): Likewise.
+
2021-12-15 Mark Wielaard <mark@klomp.org>
* elf_begin.c (get_shnum): Use offsetof to get field of unaligned
/* Align offset to 4 bytes as needed for note name and descriptor data.
This is almost always used, except for GNU Property notes, which use
8 byte padding... */
-#define NOTE_ALIGN4(n) (((n) + 3) & -4U)
+#define NOTE_ALIGN4(n) (((n) + 3) & -4UL)
/* Special note padding rule for GNU Property notes. */
-#define NOTE_ALIGN8(n) (((n) + 7) & -8U)
+#define NOTE_ALIGN8(n) (((n) + 7) & -8UL)
/* Convenience macro. */
#define INVALID_NDX(ndx, type, data) \