slirp: fix unaligned access in bootp code
authorAurelien Jarno <aurelien@aurel32.net>
Thu, 6 Jan 2011 21:43:13 +0000 (22:43 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Mon, 10 Jan 2011 09:56:25 +0000 (10:56 +0100)
commit3b0152ae7d2b601735ad2aa7e35f972428927d24
treeab1d3ada2c1fa6ee1b429d9c56676e9323416fc8
parent23ed97fa7cd9301aefb3db410a64f2715841f655
slirp: fix unaligned access in bootp code

Slirp code tries to be smart an avoid data copy by using pointer to
the data. This solution leads to unaligned access, in this case
preq_addr, which is a 32-bit long structure. There is no real point
of avoiding data copy in a such case, as the value itself is smaller
or the same size as a pointer.

The patch replaces pointers to the preq_addr structure by the strcture
itself, and use the address 0.0.0.0 if no address has been requested
(this is not a valid address in such a request). It compares it with
htonl(0L) for correctness reasons, in case a code checker look for such
mistakes. It also uses memcpy() for copying the data, which takes care
of alignement issues.

This fixes an unaligned access on IA64 host while requesting a DHCP
address.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
slirp/bootp.c