[Bug 278043] Diskless nfs root BOOTP/DHCP Broken
- In reply to: bugzilla-noreply_a_freebsd.org: "[Bug 278043] Diskless nfs root BOOTP/DHCP Broken"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 31 Mar 2024 15:33:37 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278043
Mark Johnston <markj@FreeBSD.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|New |Open
CC| |bz@FreeBSD.org,
| |glebius@FreeBSD.org,
| |markj@FreeBSD.org,
| |tuexen@freebsd.org
--- Comment #2 from Mark Johnston <markj@FreeBSD.org> ---
Indeed, bootpc_call() does this strange thing to ensure that the src addr of
DHCP requests has address 0.0.0.0:
638 /* Set netmask to 0.0.0.0 */
639 clear_sinaddr(sin);
640 error = ifioctl(bootp_so, SIOCAIFADDR,
(caddr_t)ifra,
641 td);
642 if (error != 0)
643 panic("%s: SIOCAIFADDR, error=%d",
__func__,
644 error);
645
646 error = sosend(bootp_so, (struct sockaddr *) &dst,
647 &auio, NULL, NULL, 0, td);
648 if (error != 0)
649 printf("%s: sosend: %d state %08x\n",
__func__,
650 error, (int )bootp_so->so_state);
651
652 /* Set netmask to 255.0.0.0 */
653 sin->sin_addr.s_addr = htonl(0xff000000);
654 error = ifioctl(bootp_so, SIOCAIFADDR,
(caddr_t)ifra,
655 td);
656 if (error != 0)
657 panic("%s: SIOCAIFADDR, error=%d",
__func__,
658 error);
The sosend() causes udp_send() to connect the socket, resulting in an error
because the local address is 0.0.0.0. We don't permit that since INADDR_ANY is
used as a sentinel value in the inpcb layer. dhclient doesn't have this
problem since it uses BPF to write packets.
Any opinions on how best to fix this?
--
You are receiving this mail because:
You are the assignee for the bug.