bug-binutils
[Top][All Lists]
Advanced

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

[Bug binutils/24958] New: Buffer over read in print_insn_mmix


From: p.antoine at catenacyber dot fr
Subject: [Bug binutils/24958] New: Buffer over read in print_insn_mmix
Date: Mon, 02 Sep 2019 18:46:44 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=24958

            Bug ID: 24958
           Summary: Buffer over read in print_insn_mmix
           Product: binutils
           Version: 2.33 (HEAD)
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: binutils
          Assignee: unassigned at sourceware dot org
          Reporter: p.antoine at catenacyber dot fr
  Target Milestone: ---

Binutils is version from commit 217d2eaa69c2a5d58cdfd11619c4f2e41c986826

I have been fuzzing binutils disassembler, you can find the fuzz target here
https://github.com/google/oss-fuzz/pull/2617

Bug is buffer over read of array `spec_reg_name` of struct mmix_dis_info : `  
const char *spec_reg_name[32];`

In `print_insn_mmix`, we first have 
```
  x = buffer[1];
  y = buffer[2];
  z = buffer[3];

```

Then, with no more control of these values, we use them as index for
`spec_reg_name` 
For instance :
`(*info->fprintf_func) (info->stream, "%s,%d", minfop->spec_reg_name[x], z);`
There are three such lines of code
A patch could be to check `if x >= 32` and error in this case before calling
`(*info->fprintf_func)`

A reproducer can be made with :
disasm_info.arch = 0x49;
disasm_info.mach = 0;
disasm_info.flavour = 0;
disasm_info.buffer = {0xf7, 0x25, 0x00, 0x00};
disasm_info.buffer_length = 4;

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

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