diff options
| author | Fang Xieyan <fangxy@xiaopeng.com> | 2026-09-16 23:17:53 +0800 |
|---|---|---|
| committer | Daniel Thompson <daniel@riscstar.com> | 2026-10-28 16:55:40 +0000 |
| commit | 9ca9e8c857b55a081d5a1f8039b27cbb4d646b49 (patch) | |
| tree | a518dd25dcd05307ae614f00b56c04a36b514548 /scripts/basic/split-include.c | |
| parent | 13962ef7021ef2531a4f6650eca87c363e6c9c32 (diff) | |
| download | linux-9ca9e8c857b55a081d5a1f8039b27cbb4d646b49.tar.gz linux-9ca9e8c857b55a081d5a1f8039b27cbb4d646b49.zip | |
kgdb: Fix buffer overflow in the qRcmd packet handler
gdb_cmd_query() decodes the hex payload of a qRcmd packet (the GDB
"monitor" command passthrough to kdb) into remcom_out_buffer and hands
it to kdb_parse(). It sizes the decode with strlen() of the payload:
int len = strlen(remcom_in_buffer + 6);
...
kgdb_hex2mem(remcom_in_buffer + 6,
remcom_out_buffer, len);
len = len / 2;
kgdb_hex2mem() takes count as the number of bytes to produce and
decodes them in place at buf, reading and writing 2 * count bytes
there. len here is the hex character count, twice the decoded size,
so the decode runs over 2 * len bytes at remcom_in_buffer + 6, off
the end of the buffer. On x86 BUFMAX is 1024, so a 256-byte monitor
command (512 hex characters) overruns remcom_in_buffer during the
in-place decode:
BUG: KASAN: global-out-of-bounds in kgdb_hex2mem+0x131/0x160
Read of size 1 at addr ffffffff8765ef05 by task sh/1
...
kgdb_hex2mem+0x131/0x160
gdb_serial_stub+0x16d4/0x3170
kgdb_cpu_enter+0xb68/0x1520
...
The buggy address belongs to the variable:
remcom_in_buffer+0x405/0x420
Halve len before the call so kgdb_hex2mem() gets the decoded byte count.
It then reads the len hex characters already in remcom_in_buffer and
writes len / 2 bytes, all inside the buffer, and remcom_out_buffer holds
the same command as before.
Fixes: a0de055cf613 ("kgdb: gdb "monitor" -> kdb passthrough")
Cc: stable@vger.kernel.org
Suggested-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/all/CAD=FV=V1-gNZ8yTsC+D8inePWv=A+9H09hWJojQf5NRpcNvK+Q@mail.gmail.com/
Assisted-by: Qoder:Qwen3.8-Max
Signed-off-by: Fang Xieyan <fangxy@xiaopeng.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20260916151753.6722-1-fangxy@xiaopeng.com
Signed-off-by: Daniel Thompson <daniel@riscstar.com>
Diffstat (limited to 'scripts/basic/split-include.c')
0 files changed, 0 insertions, 0 deletions
