[Dnsmasq-discuss] [PATCH dnsmasq 1/1] fix SIGSEGV in dbus.c when no dhcp-range is configured
Stefan Hanreich
s.hanreich at proxmox.com
Wed Nov 26 15:39:25 UTC 2025
When sending a 'AddDhcpLease' DBus message to a dnsmasq instance that
does not have a dhcp-range configured, then dnsmasq segfaults. This
happens because dnsmasq tries to allocate a lease, but DHCP is not
initialized. lease_allocate returns a null pointer, which is in turn
used by lease_set_hwaddr in the dbus handler, triggering the segfault.
Avoid this by adding a null check and returning early from the dbus
handler with an error.
This has already been reported previously here [1].
[1] https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2024q4/017851.html
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
src/dbus.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/dbus.c b/src/dbus.c
index dac92ed..b734f85 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -612,13 +612,21 @@ static DBusMessage *dbus_add_lease(DBusMessage* message)
if (!(lease = lease6_find_by_addr(&addr.addr6, 128, 0)))
lease = lease6_allocate(&addr.addr6,
is_temporary ? LEASE_TA : LEASE_NA);
- lease_set_iaid(lease, ia_id);
+
+ if (lease) {
+ lease_set_iaid(lease, ia_id);
+ }
}
#endif
else
return dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS,
"Invalid IP address '%s'", ipaddr);
+ if (!lease) {
+ return dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS,
+ "unable to allocate lease for IP address '%s'", ipaddr);
+ }
+
hw_len = parse_hex((char*)hwaddr, dhcp_chaddr, DHCP_CHADDR_MAX, NULL, &hw_type);
if (hw_len < 0)
return dbus_message_new_error_printf(message, DBUS_ERROR_INVALID_ARGS,
--
2.47.3
More information about the Dnsmasq-discuss
mailing list