public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
From: Nick Clifton <nickc@sourceware.org>
To: bfd-cvs@sourceware.org
Subject: [binutils-gdb] Fix illegal memory access implementing relocs in a fuzzed x86_64 object file.
Date: Mon, 19 Jun 2023 11:09:53 +0000 (GMT)	[thread overview]
Message-ID: <20230619110953.23F223858D32@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=74d39f70cd9090ba1cdc406421480bb50a864cd2

commit 74d39f70cd9090ba1cdc406421480bb50a864cd2
Author: Nick Clifton <nickc@redhat.com>
Date:   Mon Jun 19 12:09:11 2023 +0100

    Fix illegal memory access implementing relocs in a fuzzed x86_64 object file.
    
      PR 30560
      * elf64-x86-64.c (elf_x86_64_relocate_section): Add more checks for a valid relocation offset.

Diff:
---
 bfd/ChangeLog      |  6 ++++++
 bfd/elf64-x86-64.c | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1f9b7ec14ba..4fed6e16874 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2023-06-19  Nick Clifton  <nickc@redhat.com>
+
+	PR 30560
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Add more checks
+	for a valid relocation offset.
+
 2023-06-07  Nick Clifton  <nickc@redhat.com>
 
 	PR 30499
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index dd987ee011b..f926464d812 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -3501,6 +3501,9 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 	    {
 	      bfd_vma roff = rel->r_offset;
 
+	      if (roff >= input_section->size)
+		goto corrupt_input;
+
 	      BFD_ASSERT (! unresolved_reloc);
 
 	      if (r_type == R_X86_64_TLSGD)
@@ -3541,6 +3544,8 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		  int largepic = 0;
 		  if (ABI_64_P (output_bfd))
 		    {
+		      if (roff + 5 >= input_section->size)
+			goto corrupt_input;
 		      if (contents[roff + 5] == 0xb8)
 			{
 			  if (roff < 3
@@ -3576,6 +3581,10 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 			      "\x64\x8b\x04\x25\0\0\0\0\x48\x8d\x80\0\0\0",
 			      15);
 		    }
+
+		  if (roff + 8 + largepic >= input_section->size)
+		    goto corrupt_input;
+
 		  bfd_put_32 (output_bfd,
 			      elf_x86_64_tpoff (info, relocation),
 			      contents + roff + 8 + largepic);
@@ -3633,12 +3642,18 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 		    }
 		  if (prefix)
 		    {
+		      if (roff + 2 >= input_section->size)
+			goto corrupt_input;
+
 		      bfd_put_8 (output_bfd, 0x0f, contents + roff);
 		      bfd_put_8 (output_bfd, 0x1f, contents + roff + 1);
 		      bfd_put_8 (output_bfd, 0x00, contents + roff + 2);
 		    }
 		  else
 		    {
+		      if (roff + 1 >= input_section->size)
+			goto corrupt_input;
+
 		      bfd_put_8 (output_bfd, 0x66, contents + roff);
 		      bfd_put_8 (output_bfd, 0x90, contents + roff + 1);
 		    }

                 reply	other threads:[~2023-06-19 11:09 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=20230619110953.23F223858D32@sourceware.org \
    --to=nickc@sourceware.org \
    --cc=bfd-cvs@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).