helper: fix OOB read in grab_extradata_lua bounds check

The loop in grab_extradata_lua checked *next != 0 in the loop
condition before the body could test next == end, so when next
reached end the byte *end was read out-of-bounds. The non-Lua
sibling grab_extradata had the correct order (test next == end
before dereferencing). Fix by adopting the same idiom.

Security: a DHCP client can supply a vendor-class option whose
content fills the extradata buffer with no trailing NUL, causing
a 1-byte OOB read in the Lua helper child (already non-root).
Requires HAVE_LUASCRIPT and a configured Lua script. Not feasible
for triggering a crash from remote reliably.

Signed-off-by: Dominik <dl6er@dl6er.de>
This commit is contained in:
Dominik authored and Simon Kelley committed 2026-03-30 17:57:44 +01:00
1 parent b12a9249f6
commit 9e3e0465cd
1 file changed
+3 -1
+3 -1
View File
@@ -740,9 +740,11 @@ static unsigned char *grab_extradata_lua(unsigned char *buf, unsigned char *end,
if (!buf || (buf == end))
return NULL;
for (next = buf; *next != 0; next++)
for (next = buf; ; next++)
if (next == end)
return NULL;
else if (*next == 0)
break;
if (next != buf)
{