• David Gibson's avatar
    slirp: Fix assertion failure on rejected DHCP requests · 90d7416a
    David Gibson authored
    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: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    90d7416a
bootp.c 9.13 KB