[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Error out on invalid locexpr length



Hi,

When invoking dwz with a file containing an invalid locexpr length, we can run
into this assertion:
...
dwz: dwz.c:1722: read_loclist: Assertion `ptr + len <= endsec' failed.
Aborted (core dumped)
...

Change the assert into an error:
...
dwz: a.out: locexpr length 0x4ef exceeds .debug_loc section
...

OK for trunk?

Thanks,
- Tom

Error out on invalid locexpr length

2019-02-14  Tom de Vries  <tdevries@suse.de>

	PR dwz/24172
	* dwz.c (read_loclist): Change assert (ptr + len <= endsec) into an
	error.

---
 dwz.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/dwz.c b/dwz.c
index 4ef8657..a876ab2 100644
--- a/dwz.c
+++ b/dwz.c
@@ -1719,7 +1719,13 @@ read_loclist (DSO *dso, dw_die_ref die, GElf_Addr offset)
 	continue;
 
       len = read_16 (ptr);
-      assert (ptr + len <= endsec);
+      if (!(ptr + len <= endsec))
+	{
+	  error (0, 0,
+		 "%s: locexpr length 0x%Lx exceeds .debug_loc section",
+		 dso->filename, (long long) len);
+	  return 1;
+	}
 
       if (read_exprloc (dso, die, ptr, len, &need_adjust))
 	return 1;