|
@@ -672,7 +672,7 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf)
|
|
|
static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr,
|
|
|
bool retprobe, struct probe_trace_point *tp)
|
|
|
{
|
|
|
- Dwarf_Addr eaddr;
|
|
|
+ Dwarf_Addr eaddr, highaddr;
|
|
|
const char *name;
|
|
|
|
|
|
/* Copy the name of probe point */
|
|
@@ -683,6 +683,16 @@ static int convert_to_trace_point(Dwarf_Die *sp_die, Dwarf_Addr paddr,
|
|
|
dwarf_diename(sp_die));
|
|
|
return -ENOENT;
|
|
|
}
|
|
|
+ if (dwarf_highpc(sp_die, &highaddr) != 0) {
|
|
|
+ pr_warning("Failed to get end address of %s\n",
|
|
|
+ dwarf_diename(sp_die));
|
|
|
+ return -ENOENT;
|
|
|
+ }
|
|
|
+ if (paddr > highaddr) {
|
|
|
+ pr_warning("Offset specified is greater than size of %s\n",
|
|
|
+ dwarf_diename(sp_die));
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
tp->symbol = strdup(name);
|
|
|
if (tp->symbol == NULL)
|
|
|
return -ENOMEM;
|