The pointer may be unaligned, so we must use our routines for that. At the same time, we might as well use the big-endian version instead of ntohs.
This fixes sparc64 host SIGBUS during pxe boot. Signed-off-by: Richard Henderson <richard.hender...@linaro.org> --- slirp/slirp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slirp/slirp.c b/slirp/slirp.c index 322edf51eb..a116f43878 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -851,7 +851,7 @@ void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len) if (pkt_len < ETH_HLEN) return; - proto = ntohs(*(uint16_t *)(pkt + 12)); + proto = lduw_be_p(pkt + 12); switch(proto) { case ETH_P_ARP: arp_input(slirp, pkt, pkt_len); -- 2.17.2