public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
From: Mark Wielaard <mark@klomp.org>
To: elfutils-devel@sourceware.org
Cc: Mark Wielaard <mark@klomp.org>
Subject: [PATCH] libdwfl: Make sure note data is properly aligned.
Date: Sat, 18 Dec 2021 02:04:06 +0100	[thread overview]
Message-ID: <20211218010406.876500-1-mark@klomp.org> (raw)

In dwfl_segment_report_module the note data might not be properly
aligned. Check that it is before accessing the data directly.
Otherwise convert data so it is properly aligned.

Also fix NOTE_ALIGN4 and NOTE_ALIGN8 to work correctly with long
types.

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 libdwfl/ChangeLog                    | 5 +++++
 libdwfl/dwfl_segment_report_module.c | 5 ++++-
 libelf/ChangeLog                     | 5 +++++
 libelf/libelfP.h                     | 4 ++--
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 8760b1ef..f18a0c45 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,8 @@
+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.
diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c
index f323929e..2263e3cc 100644
--- a/libdwfl/dwfl_segment_report_module.c
+++ b/libdwfl/dwfl_segment_report_module.c
@@ -517,7 +517,10 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
               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
                 {
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index 96059eff..617d97a5 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,8 @@
+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
diff --git a/libelf/libelfP.h b/libelf/libelfP.h
index fc1aebec..2c6995bb 100644
--- a/libelf/libelfP.h
+++ b/libelf/libelfP.h
@@ -603,10 +603,10 @@ extern void __libelf_reset_rawdata (Elf_Scn *scn, void *buf, size_t size,
 /* 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) \
-- 
2.30.2


                 reply	other threads:[~2021-12-18  1:04 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211218010406.876500-1-mark@klomp.org \
    --to=mark@klomp.org \
    --cc=elfutils-devel@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).