The guest network stack might DHCPREQUEST an address that the slirp built in dhcp server can't let it have - for example if the guest has an old leases file from another network configuration. In this case the dhcp server should and does reject the request and prepares to send a DHCPNAK to the client. However, in this case the daddr variable in bootp_reply() is set to 0.0.0.0. Shortly afterwards, it unconditionally attempts to pre-insert the new client address into the ARP table. This causes an assertion failure in arp_address_add() because of the 0.0.0.0 address. According to RFC2131, DHCPNAK messages for clients on the same subnet must be sent to the broadcast address (S3.2, subpoint 2). Cc: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> |
||
|---|---|---|
| .. | ||
| COPYRIGHT | ||
| arp_table.c | ||
| bootp.c | ||
| bootp.h | ||
| cksum.c | ||
| debug.h | ||
| if.c | ||
| if.h | ||
| ip.h | ||
| ip_icmp.c | ||
| ip_icmp.h | ||
| ip_input.c | ||
| ip_output.c | ||
| libslirp.h | ||
| main.h | ||
| mbuf.c | ||
| mbuf.h | ||
| misc.c | ||
| misc.h | ||
| sbuf.c | ||
| sbuf.h | ||
| slirp.c | ||
| slirp.h | ||
| slirp_config.h | ||
| socket.c | ||
| socket.h | ||
| tcp.h | ||
| tcp_input.c | ||
| tcp_output.c | ||
| tcp_subr.c | ||
| tcp_timer.c | ||
| tcp_timer.h | ||
| tcp_var.h | ||
| tcpip.h | ||
| tftp.c | ||
| tftp.h | ||
| udp.c | ||
| udp.h | ||