https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=284073

--- Comment #15 from Zhenlei Huang <z...@freebsd.org> ---
Update: After carefully reading the disassembled code, I can confirm the fault
address is RIP (0xffffffff80b4dee7).

For `sysctl_handle_string()`, `req` is the last arg which is passed via
register %rcx.

```
ffffffff80b4de2e: 48 89 cb              movq    %rcx, %rbx
```

It was saved to callee-saved register %rbx, and the following flow does not
touch it. It was `0000000500000005` when passed in. Then indirect memory access
```
ffffffff80b4dee7: 4c 8b 63 10           movq    0x10(%rbx), %r12
```
will panic.

Part of disassembled code of if_bnxt.ko,
```
$ objdump --disassemble-symbols=bnxt_dcb_list_app -r /boot/kernel/if_bnxt.ko
...
   1a5cc: 53                            pushq   %rbx
   1a5cd: 48 81 ec 28 02 00 00          subq    $0x228, %rsp            # imm =
0x228, reserve app[128] and other local vars. 
   1a5d4: 48 89 cb                      movq    %rcx, %rbx # save req
...
   1a622: 48 89 5d c8                   movq    %rbx, -0x38(%rbp)
...
   1a6f0: ba 00 10 00 00                movl    $0x1000, %edx           # imm =
0x1000
   1a6f5: 4c 89 f7                      movq    %r14, %rdi
   1a6f8: 4c 89 fe                      movq    %r15, %rsi
   1a6fb: 48 8b 4d c8                   movq    -0x38(%rbp), %rcx  # previously
saved req
   1a6ff: e8 00 00 00 00                callq   0x1a704
<bnxt_dcb_list_app+0x144>
                000000000001a700:  R_X86_64_PLT32      
sysctl_handle_string-0x4
```

If `bnxt_dcb_ieee_listapp()` OOB write the on stack variable app[128], then it
make sense that we get `%rbx ==  0000000500000005`. We can add asserting for
that.

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to