selftests/bpf: Fix misaligned memory accesses in xdp_bonding test

Construct packet buffer explicitly for each packet to avoid unaligned
memory accesses.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20211124002325.1737739-13-andrii@kernel.org
This commit is contained in:
Andrii Nakryiko 2021-11-23 16:23:24 -08:00 committed by Daniel Borkmann
parent 57428298b5
commit 43080b7106
1 changed files with 20 additions and 16 deletions

View File

@ -218,9 +218,9 @@ static int send_udp_packets(int vary_dst_ip)
.h_dest = BOND2_MAC,
.h_proto = htons(ETH_P_IP),
};
uint8_t buf[128] = {};
struct iphdr *iph = (struct iphdr *)(buf + sizeof(eh));
struct udphdr *uh = (struct udphdr *)(buf + sizeof(eh) + sizeof(*iph));
struct iphdr iph = {};
struct udphdr uh = {};
uint8_t buf[128];
int i, s = -1;
int ifindex;
@ -232,17 +232,16 @@ static int send_udp_packets(int vary_dst_ip)
if (!ASSERT_GT(ifindex, 0, "get bond1 ifindex"))
goto err;
memcpy(buf, &eh, sizeof(eh));
iph->ihl = 5;
iph->version = 4;
iph->tos = 16;
iph->id = 1;
iph->ttl = 64;
iph->protocol = IPPROTO_UDP;
iph->saddr = 1;
iph->daddr = 2;
iph->tot_len = htons(sizeof(buf) - ETH_HLEN);
iph->check = 0;
iph.ihl = 5;
iph.version = 4;
iph.tos = 16;
iph.id = 1;
iph.ttl = 64;
iph.protocol = IPPROTO_UDP;
iph.saddr = 1;
iph.daddr = 2;
iph.tot_len = htons(sizeof(buf) - ETH_HLEN);
iph.check = 0;
for (i = 1; i <= NPACKETS; i++) {
int n;
@ -253,10 +252,15 @@ static int send_udp_packets(int vary_dst_ip)
};
/* vary the UDP destination port for even distribution with roundrobin/xor modes */
uh->dest++;
uh.dest++;
if (vary_dst_ip)
iph->daddr++;
iph.daddr++;
/* construct a packet */
memcpy(buf, &eh, sizeof(eh));
memcpy(buf + sizeof(eh), &iph, sizeof(iph));
memcpy(buf + sizeof(eh) + sizeof(iph), &uh, sizeof(uh));
n = sendto(s, buf, sizeof(buf), 0, (struct sockaddr *)&saddr_ll, sizeof(saddr_ll));
if (!ASSERT_EQ(n, sizeof(buf), "sendto"))