Commit 43080b71 authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Daniel Borkmann

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: default avatarAndrii Nakryiko <andrii@kernel.org>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20211124002325.1737739-13-andrii@kernel.org
parent 57428298
......@@ -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"))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment