mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Putative fix to crash in IPv4 DHCP, introduced whilst
generalising the DHCP option filter code: don't match options against context tag when context->netid.net == NULL, since there's no tag then.
This commit is contained in:
@@ -102,7 +102,7 @@ struct dhcp_netid *option_filter(struct dhcp_netid *tags, struct dhcp_netid *con
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* now flag options which are valid, including the context tags,
|
/* now flag options which are valid, including the context tags,
|
||||||
otherwise valid options are inhibited if we found a higher priotity one above */
|
otherwise valid options are inhibited if we found a higher priority one above */
|
||||||
if (context_tags)
|
if (context_tags)
|
||||||
{
|
{
|
||||||
struct dhcp_netid *last_tag;
|
struct dhcp_netid *last_tag;
|
||||||
|
|||||||
@@ -504,10 +504,9 @@ u64 lease_find_max_addr6(struct dhcp_context *context)
|
|||||||
if (!(context->flags & (CONTEXT_STATIC | CONTEXT_PROXY)))
|
if (!(context->flags & (CONTEXT_STATIC | CONTEXT_PROXY)))
|
||||||
for (lease = leases; lease; lease = lease->next)
|
for (lease = leases; lease; lease = lease->next)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_DHCP6
|
|
||||||
if (!(lease->flags & (LEASE_TA | LEASE_NA)))
|
if (!(lease->flags & (LEASE_TA | LEASE_NA)))
|
||||||
continue;
|
continue;
|
||||||
#endif
|
|
||||||
if (is_same_net6((struct in6_addr *)lease->hwaddr, &context->start6, 64) &&
|
if (is_same_net6((struct in6_addr *)lease->hwaddr, &context->start6, 64) &&
|
||||||
addr6part((struct in6_addr *)lease->hwaddr) > addr6part(&context->start6) &&
|
addr6part((struct in6_addr *)lease->hwaddr) > addr6part(&context->start6) &&
|
||||||
addr6part((struct in6_addr *)lease->hwaddr) <= addr6part(&context->end6) &&
|
addr6part((struct in6_addr *)lease->hwaddr) <= addr6part(&context->end6) &&
|
||||||
|
|||||||
@@ -2095,7 +2095,8 @@ static void do_options(struct dhcp_context *context,
|
|||||||
struct dhcp_netid_list *id_list;
|
struct dhcp_netid_list *id_list;
|
||||||
|
|
||||||
/* filter options based on tags, those we want get DHOPT_TAGOK bit set */
|
/* filter options based on tags, those we want get DHOPT_TAGOK bit set */
|
||||||
tagif = option_filter(netid, &context->netid, config_opts);
|
context->netid.next = NULL;
|
||||||
|
tagif = option_filter(netid, context->netid.net ? &context->netid : NULL, config_opts);
|
||||||
|
|
||||||
/* logging */
|
/* logging */
|
||||||
if (option_bool(OPT_LOG_OPTS) && req_options)
|
if (option_bool(OPT_LOG_OPTS) && req_options)
|
||||||
|
|||||||
Reference in New Issue
Block a user