[Dnsmasq-discuss] [PATCH] DHCPv6 network range is not checked well with dhcp-sequential-ip
Tomas Korbar
tkorbar at redhat.com
Mon Mar 23 09:09:03 UTC 2026
Hello everyone,
Is there any chance this patch could be merged?
On Wed, Nov 19, 2025 at 1:47 AM Geert Stappers <stappers at stappers.nl> wrote:
> On Tue, Oct 07, 2025 at 07:18:27PM +0200, Petr Menšík via Dnsmasq-discuss
> wrote:
> > Hello Simon and everyone,
> >
> > I am sending this patch on behalf of Tomáš Korbař, who worked on
> > debugging the issue and even written a test [1] to verify it works. Test
> > is written in our shell based beakerlib, but I think is readable enough
> > even in basic form.
>
> I'm sending this reminder.
> Because there was no-follow-up yet.
>
>
> > Currentdhcp-range does not work well in case DHCP client would refuse the
> > offered address. When this happens, current dnsmasq does not even stop at
> > maximal address specified. This change adds similar check like when no
> > dhcp-sequential-ip is used. Tomáš tested it already, but would anyone
> mind
> > testing it also? If there is no regression or need to adjust it, would
> you
> > mind merging it? Thank you in advance! Cheers, Petr
> > 1.
> https://gitlab.com/redhat/centos-stream/tests/dnsmasq/-/merge_requests/6
> >
> > --
> > Petr Menšík
> > Senior Software Engieer, RHEL
> > Red Hat, https://www.redhat.com/
> > PGP: DFCF908DB7C87E8E529925BC4931CA5B6C9FC5CB
>
> > From 913472864bdcd5b7bb01c31ff27706b6dfbb99a2 Mon Sep 17 00:00:00 2001
> > From: Tomas Korbar <tkorbar at redhat.com>
> > Date: Tue, 7 Oct 2025 19:12:00 +0200
> > Subject: [PATCH] Fix obeying dhcp-range if dhcp-sequential-ip and IPV6
> is used
> >
> > Previously starting position for searching the next free address
> > in IPV6 range was no checked whether it is in bounds. This
> > commit adds modulo operation like when dhcp-sequential-ip is
> > not used to ensure dnsmasq does not offer out of range address.
> > ---
> > src/dhcp6.c | 17 ++++++++---------
> > 1 file changed, 8 insertions(+), 9 deletions(-)
> >
> > diff --git a/src/dhcp6.c b/src/dhcp6.c
> > index 482caf7d..99cc77b2 100644
> > --- a/src/dhcp6.c
> > +++ b/src/dhcp6.c
> > @@ -522,27 +522,26 @@ struct dhcp_context *address6_allocate(struct
> dhcp_context *context, unsigned c
> > continue;
> > else
> > {
> > + u64 range = 1 + addr6part(&c->end6) - addr6part(&c->start6);
> > + u64 offset = c->addr_epoch;
> > if (!temp_addr && option_bool(OPT_CONSEC_ADDR))
> > {
> > /* seed is largest extant lease addr in this context,
> > skip addresses equal to the number of addresses rejected
> > by clients. This should avoid the same client being
> offered the same
> > address after it has rjected it. */
> > - start = lease_find_max_addr6(c) + 1 + serial + c->addr_epoch;
> > + offset += lease_find_max_addr6(c) - addr6part(&c->start6) +
> 1 + serial;
> > if (c->addr_epoch)
> > c->addr_epoch--;
> > }
> > else
> > {
> > - u64 range = 1 + addr6part(&c->end6) - addr6part(&c->start6);
> > - u64 offset = j + c->addr_epoch;
> > -
> > - /* don't divide by zero if range is whole 2^64 */
> > - if (range != 0)
> > - offset = offset % range;
> > -
> > - start = addr6part(&c->start6) + offset;
> > + offset += j;
> > }
> > + /* don't divide by zero if range is whole 2^64 */
> > + if (range != 0)
> > + offset = offset % range;
> > + start = addr6part(&c->start6) + offset;
> >
> > /* iterate until we find a free address. */
> > addr = start;
> > --
> > 2.51.0
> >
>
> Groeten
> Geert Stappers
> Picking up some patches
> --
> Silence is hard to parse
>
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/attachments/20260323/1d8d6f6c/attachment.htm>
More information about the Dnsmasq-discuss
mailing list