From 88e42dc1b6b73153c654ce58b948b981d3acba3e Mon Sep 17 00:00:00 2001 From: lparam Date: Wed, 30 Aug 2017 23:25:27 +0800 Subject: [PATCH] discard non-IPv4 packet --- src/tun.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tun.c b/src/tun.c index be73958..52278e9 100644 --- a/src/tun.c +++ b/src/tun.c @@ -89,11 +89,14 @@ poll_cb(uv_poll_t *watcher, int status, int events) { int mlen = read(ctx->tunfd, m, tun->mtu); if (mlen <= 0) { logger_log(LOG_ERR, "tun read error"); - free(tunbuf); - return; + return free(tunbuf); } struct iphdr *iphdr = (struct iphdr *) m; + if (iphdr->version != 4) { + logger_log(LOG_WARNING, "Discard non-IPv4 packet"); + return free(tunbuf); + } if (mode == xTUN_SERVER) { uv_rwlock_rdlock(&rwlock); @@ -152,10 +155,10 @@ poll_cb(uv_poll_t *watcher, int status, int events) { tcp_client_send(ctx, tunbuf, PRIMITIVE_BYTES + mlen); } else { - free(tunbuf); if (ctx->connect == DISCONNECTED) { tcp_client_connect(ctx); } + return free(tunbuf); } } else {