summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Żenczykowski <maze@google.com>2023-03-15 01:00:02 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-03-15 01:00:02 +0000
commit643cdba2fd244527c2ae2a3cd607117b2f0ea56a (patch)
tree0b20324fce0eb0fa7211e557ad6ab56b01c2e880
parent720ac8f0991934bc4cf7d3d6abd7e9beffd00ac0 (diff)
parent0b0dbab8bbf1dc261f047fb227c71d660e95508f (diff)
downloadandroid-clat-643cdba2fd244527c2ae2a3cd607117b2f0ea56a.tar.gz
Merge "clatd: skip over virtio_net_hdr" am: 1afdff7204 am: 0b0dbab8bb
Original change: https://android-review.googlesource.com/c/platform/external/android-clat/+/2486915 Change-Id: I12188e472c86db540ad39fc7a87ec6953259b3fe Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--clatd.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/clatd.c b/clatd.c
index 284a676..e10bda1 100644
--- a/clatd.c
+++ b/clatd.c
@@ -36,6 +36,7 @@
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <linux/if_tun.h>
+#include <linux/virtio_net.h>
#include <net/if.h>
#include <sys/uio.h>
@@ -83,6 +84,7 @@ void process_packet_6_to_4(struct tun_data *tunnel) {
// we don't really support vlans (or especially Q-in-Q)...
// but a few bytes of extra buffer space doesn't hurt...
struct {
+ struct virtio_net_hdr vnet;
uint8_t payload[22 + MAXMTU];
char pad; // +1 to make packet truncation obvious
} buf;
@@ -125,7 +127,7 @@ void process_packet_6_to_4(struct tun_data *tunnel) {
}
}
- if (readlen < tp_net) {
+ if (readlen < sizeof(struct virtio_net_hdr) + tp_net) {
logmsg(ANDROID_LOG_WARN, "%s: ignoring %zd byte pkt shorter than %u L2 header",
__func__, readlen, tp_net);
return;
@@ -140,7 +142,7 @@ void process_packet_6_to_4(struct tun_data *tunnel) {
}
}
- translate_packet(tunnel->fd4, 0 /* to_ipv6 */, buf.payload + tp_net, readlen - tp_net);
+ translate_packet(tunnel->fd4, 0 /* to_ipv6 */, buf.payload + tp_net, readlen - sizeof(struct virtio_net_hdr) - tp_net);
}
// reads TUN_PI + L3 IPv4 packet from tun, translates to IPv6, writes to AF_INET6/RAW socket