qemu/slirp
David Gibson 90d7416ab1 slirp: Fix assertion failure on rejected DHCP requests
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>
2012-02-27 14:55:07 +01:00
..
arp_table.c slirp: Fix types of IP address parameters 2011-08-05 12:51:11 +02:00
bootp.c slirp: Fix assertion failure on rejected DHCP requests 2012-02-27 14:55:07 +01:00
bootp.h
cksum.c slirp: Replace u_int8_t, u_int16_t, u_int32_t, u_int64_t by standard int types 2010-07-25 16:59:41 +02:00
COPYRIGHT
debug.h
if.c slirp: Refactor if_start 2012-02-27 14:54:49 +01:00
if.h slirp: Clean up ifs_init 2012-02-27 14:54:49 +01:00
ip_icmp.c slirp: Prevent sending ICMP error replies to source-only addresses 2012-02-08 10:07:54 +01:00
ip_icmp.h slirp: Forward ICMP echo requests via unprivileged sockets 2011-07-23 10:19:50 -05:00
ip_input.c slirp: Fix unusual "comments" in unused code 2011-07-27 10:10:17 +01:00
ip_output.c slirp: Replace m_freem with m_free 2011-07-23 10:19:49 -05:00
ip.h Use new macro QEMU_PACKED for packed structures 2011-09-03 10:45:59 +00:00
libslirp.h main-loop: create main-loop.c 2011-10-21 18:14:30 +02:00
main.h Delayed IP packets 2011-08-03 12:57:11 +02:00
mbuf.c Delayed IP packets 2011-08-03 12:57:11 +02:00
mbuf.h slirp: Clean up ifs_init 2012-02-27 14:54:49 +01:00
misc.c slirp/misc: fix gcc __warn_memset_zero_len warnings 2012-02-24 13:24:42 +00:00
misc.h slirp: Replace u_int8_t, u_int16_t, u_int32_t, u_int64_t by standard int types 2010-07-25 16:59:41 +02:00
sbuf.c
sbuf.h
slirp_config.h slirp: Remove unused code for bad sprintf 2010-11-21 09:16:57 -06:00
slirp.c char: rename qemu_chr_write() -> qemu_chr_fe_write() 2011-08-22 10:17:15 -05:00
slirp.h Use new macro QEMU_PACKED for packed structures 2011-09-03 10:45:59 +00:00
socket.c Wrap recv to avoid warnings 2011-07-25 14:38:56 +00:00
socket.h slirp: Replace u_int8_t, u_int16_t, u_int32_t, u_int64_t by standard int types 2010-07-25 16:59:41 +02:00
tcp_input.c slirp: Fix use after release on tcp_input 2011-09-28 13:10:22 +02:00
tcp_output.c slirp: Replace u_int8_t, u_int16_t, u_int32_t, u_int64_t by standard int types 2010-07-25 16:59:41 +02:00
tcp_subr.c Remove blanks before \n in output strings 2011-09-16 08:25:56 -05:00
tcp_timer.c
tcp_timer.h
tcp_var.h slirp: Replace u_int8_t, u_int16_t, u_int32_t, u_int64_t by standard int types 2010-07-25 16:59:41 +02:00
tcp.h slirp: Fix bit field types in IP header structs 2011-08-14 23:34:44 -07:00
tcpip.h
tftp.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
tftp.h slirp: Remove some type casts caused by bad declaration of x.tp_buf 2011-02-25 15:58:59 +00:00
udp.c slirp: Replace m_freem with m_free 2011-07-23 10:19:49 -05:00
udp.h slirp: Replace u_int8_t, u_int16_t, u_int32_t, u_int64_t by standard int types 2010-07-25 16:59:41 +02:00