mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
net: fix misaligned member access
Fixes the following ASAN warnings: /home/elmarco/src/qemu/hw/net/net_tx_pkt.c:201:27: runtime error: member access within misaligned address 0x631000028846 for type 'struct ip_header', which requires 4 byte alignment 0x631000028846: note: pointer points here 01 00 00 00 45 00 01 a9 01 00 00 00 40 11 78 45 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 ^ /home/elmarco/src/qemu/hw/net/net_tx_pkt.c:208:63: runtime error: member access within misaligned address 0x631000028846 for type 'struct ip_header', which requires 4 byte alignment 0x631000028846: note: pointer points here 01 00 00 00 45 00 01 a9 01 00 00 00 40 11 78 45 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 ^ /home/elmarco/src/qemu/hw/net/net_tx_pkt.c:210:13: runtime error: member access within misaligned address 0x631000028846 for type 'struct ip_header', which requires 4 byte alignment 0x631000028846: note: pointer points here 01 00 00 00 45 00 01 a9 01 00 00 00 40 11 78 45 00 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20180209190340.19516-1-marcandre.lureau@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
136c67e078
commit
4f51e1d386
2 changed files with 4 additions and 2 deletions
|
@ -205,7 +205,7 @@ static bool net_tx_pkt_parse_headers(struct NetTxPkt *pkt)
|
|||
return false;
|
||||
}
|
||||
|
||||
pkt->l4proto = ((struct ip_header *) l3_hdr->iov_base)->ip_p;
|
||||
pkt->l4proto = IP_HDR_GET_P(l3_hdr->iov_base);
|
||||
|
||||
if (IP_HDR_GET_LEN(l3_hdr->iov_base) != sizeof(struct ip_header)) {
|
||||
/* copy optional IPv4 header data if any*/
|
||||
|
|
|
@ -194,7 +194,9 @@ struct tcp_hdr {
|
|||
#define PKT_GET_IP_HDR(p) \
|
||||
((struct ip_header *)(((uint8_t *)(p)) + eth_get_l2_hdr_length(p)))
|
||||
#define IP_HDR_GET_LEN(p) \
|
||||
((((struct ip_header *)(p))->ip_ver_len & 0x0F) << 2)
|
||||
((ldub_p(p + offsetof(struct ip_header, ip_ver_len)) & 0x0F) << 2)
|
||||
#define IP_HDR_GET_P(p) \
|
||||
(ldub_p(p + offsetof(struct ip_header, ip_p)))
|
||||
#define PKT_GET_IP_HDR_LEN(p) \
|
||||
(IP_HDR_GET_LEN(PKT_GET_IP_HDR(p)))
|
||||
#define PKT_GET_IP6_HDR(p) \
|
||||
|
|
Loading…
Reference in a new issue