mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 02:31:27 +02:00
perf symbols: Bounds-check .gnu_debuglink section data
filename__read_debuglink() copies .gnu_debuglink section data into a
caller-provided buffer via:
strncpy(debuglink, data->d_buf, size);
where size is PATH_MAX. If the ELF section is smaller than size and
lacks a null terminator, strncpy reads past data->d_buf into adjacent
memory. A malformed ELF file can trigger this, potentially causing a
segfault or leaking heap data.
Additionally, strncpy does not guarantee null termination when the
source fills the buffer.
Replace with an explicit memcpy bounded by both the output buffer
size and the actual section data size (data->d_size), followed by
explicit null termination.
Fixes: e5a1845fc0 ("perf symbols: Split out util/symbol-elf.c")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
6eaa8ee3e2
commit
9c74f0aab3
|
|
@ -1027,7 +1027,14 @@ int filename__read_debuglink(const char *filename, char *debuglink,
|
|||
goto out_elf_end;
|
||||
|
||||
/* the start of this section is a zero-terminated string */
|
||||
strncpy(debuglink, data->d_buf, size);
|
||||
if (data->d_size > 0) {
|
||||
size_t len = min(size - 1, data->d_size);
|
||||
|
||||
memcpy(debuglink, data->d_buf, len);
|
||||
debuglink[len] = '\0';
|
||||
} else {
|
||||
debuglink[0] = '\0';
|
||||
}
|
||||
|
||||
err = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user