[opcodes/arm] Fix potential null pointer dereferences

Message ID 20221103071519.3510462-1-luis.machado@arm.com
State Accepted
Headers
Series [opcodes/arm] Fix potential null pointer dereferences |

Checks

Context Check Description
snail/binutils-gdb-check success Github commit url

Commit Message

Luis Machado Nov. 3, 2022, 7:15 a.m. UTC
  PR 29598: dereferenced null pointer in arm-dis.c

  As pointed out in the bug ticket, we have a couple potential null pointer
  dereferencing situations for mapping_symbol_for_insn. Harden those.
---
 opcodes/arm-dis.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
  

Comments

Nick Clifton Nov. 3, 2022, 9:14 a.m. UTC | #1
Hi Luis,

>    PR 29598: dereferenced null pointer in arm-dis.c
> 
>    As pointed out in the bug ticket, we have a couple potential null pointer
>    dereferencing situations for mapping_symbol_for_insn. Harden those.

Approved - please apply.

Cheers
   Nick
  
Luis Machado Nov. 10, 2022, 1:13 a.m. UTC | #2
On 11/3/22 09:14, Nick Clifton wrote:
> Hi Luis,
> 
>>    PR 29598: dereferenced null pointer in arm-dis.c
>>
>>    As pointed out in the bug ticket, we have a couple potential null pointer
>>    dereferencing situations for mapping_symbol_for_insn. Harden those.
> 
> Approved - please apply.
> 
> Cheers
>    Nick
> 

Thanks. Pushed now.
  

Patch

diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 31ed81f5a4e..01b43582513 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -12482,6 +12482,10 @@  mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
   bool found = false;
   bool can_use_search_opt_p = false;
 
+  /* Sanity check.  */
+  if (info == NULL)
+    return false;
+
   /* Default to DATA.  A text section is required by the ABI to contain an
      INSN mapping symbol at the start.  A data section has no such
      requirement, hence if no mapping symbol is found the section must
@@ -12495,7 +12499,7 @@  mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
     type = MAP_ARM;
   struct arm_private_data *private_data;
 
-  if (info->private_data == NULL
+  if (info->private_data == NULL || info->symtab == NULL
       || info->symtab_size == 0
       || bfd_asymbol_flavour (*info->symtab) != bfd_target_elf_flavour)
     return false;