[PATCH] eblinitreg_sample.c: guard ebl_set_initial_registers_sample
Serhei Makarov
serhei@serhei.io
Wed Jul 22 20:01:09 GMT 2026
The generic code in ebl_set_initial_registers_sample is meant to be
used on arches with simple/small register files and a contiguous
linear mapping of perf_regs<->dwarf_regs. Make sure to guard it with a
check of ebl->perf_frame_regs_mask (the canonical sign that
sample_regs is supported for this arch).
Otherwise, a hypothetical call to ebl_set_initial_registers_sample()
on an unsupported arch with many regs falls through to the generic
code and ends up writing out of bounds to the dwarf_regs array,
(at least in builds where the assert is also compiled out).
Based on Sayed Kaif's patch and problem report cf
https://sourceware.org/pipermail/elfutils-devel/2026q2/009378.html
* libebl/eblinitreg_sample.c (ebl_set_initial_registers_sample):
Guard the generic code on ebl->perf_frame_regs_mask != 0.
Reported-by: Sayed Kaif <skaif@digiscrypt.com>
Signed-off-by: Serhei Makarov <serhei@serhei.io>
---
libebl/eblinitreg_sample.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/libebl/eblinitreg_sample.c b/libebl/eblinitreg_sample.c
index feba2c64..32c1ab1c 100644
--- a/libebl/eblinitreg_sample.c
+++ b/libebl/eblinitreg_sample.c
@@ -61,10 +61,18 @@ ebl_set_initial_registers_sample (Ebl *ebl,
regs_mapping, n_regs_mapping,
setfunc, arg);
- /* If set_initial_registers_sample is unspecified, then it is safe
- to use the following generic code to populate a contiguous array
- of dwarf_regs: */
+ /* If perf_frame_regs_mask is zero, then the sample_regs
+ functionality is unsupported by this Ebl: */
+ if (ebl->perf_frame_regs_mask == 0)
+ return false;
+
+ /* If set_initial_registers_sample is unspecified, and
+ perf_frame_regs_mask is nonzero, then it is safe to use the
+ following generic code to populate a contiguous small array of
+ dwarf_regs: */
Dwarf_Word dwarf_regs[64];
+ /* An Ebl that fails this assert is missing a custom
+ set_initial_registers_sample implementation: */
assert (ebl->frame_nregs < 64);
size_t i;
for (i = 0; i < ebl->frame_nregs; i++)
--
2.55.0
More information about the Elfutils-devel
mailing list