[Dnsmasq-discuss] [PATCH] don't setgroup to root

Simon Kelley simon at thekelleys.org.uk
Mon Jul 27 20:38:33 UTC 2026


Not sure this is the correct solution.

How are you configuring dnsmasq? If there's no --group option, then it 
will try and set the group of the daemon process to "dip", which is 
archaic, but quite likely still useful somewhere, so I don't want to 
change it.

Are you overriding the change to "dip" by setting --group=root and that 
what's causing the error? Again, there may be installations where that's 
in use and required, which I don't want to break.

Could the solution to this be --group (with no arg) or a new --nogroup 
option which explicitly disables the setgid() call?


Simon.


On 27.07.2026 13:51, Leon M. Busch-George wrote:
> From: "Leon M. Busch-George" <leon at georgemail.eu>
> 
> Without this patch, dnsmasq wont start in namespaces without group ID
> mappings unless setgroups is explicitly allowed (e.g. write "allow" to
> /proc/self/setgroups).
> This happens even if the target gid matches the current one.
> 
> Work around this issue by not calling setgroups when the target gid is 0,
> which matches the guard around calling setuid (ent_pw->pw_uid != 0).
> ---
>   src/dnsmasq.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/dnsmasq.c b/src/dnsmasq.c
> index 8fcbbda..2a3ff33 100644
> --- a/src/dnsmasq.c
> +++ b/src/dnsmasq.c
> @@ -742,7 +742,7 @@ int main (int argc, char **argv)
>         gid_t dummy;
>         
>         /* remove all supplementary groups */
> -      if (gp &&
> +      if (gp && gp->gr_gid != 0 &&
>   	  (setgroups(0, &dummy) == -1 ||
>   	   setgid(gp->gr_gid) == -1))
>   	{




More information about the Dnsmasq-discuss mailing list