shithub: riscv

Download patch

ref: 9840c50a3e0d2392a9102484e0caf970d3153790
parent: 9d0ba6f162f01253edaa4b8602f620b1869a71ca
author: cinap_lenrek <[email protected]>
date: Sat Jan 20 10:13:11 EST 2018

gre: don't drop pptp packets when smaller than v4 header

--- a/sys/src/9/ip/gre.c
+++ b/sys/src/9/ip/gre.c
@@ -558,46 +558,44 @@
 	if(flags & GRE_seq)
 		hdrlen += 4;
 
-	if(BLEN(bp) - hdrlen < sizeof(Ip4hdr)){
-		print("greretunnel: packet too short (s=%V d=%V)\n",
-			gre->src, gre->dst);
-		freeb(bp);
-		return;
-	}
-	ip = (Ip4hdr *)(bp->rp + hdrlen);
-
 	qlock(proto);
-	/*
-	 * Look for a conversation structure for this port and address, or
-	 * match the retunnel part, or match on the raw flag.
-	 */
-	for(p = proto->conv; *p; p++) {
-		c = *p;
 
-		if(c->inuse == 0)
-			continue;
+	if(eproto != 0x880B && BLEN(bp) - hdrlen >= sizeof(Ip4hdr)){
+		ip = (Ip4hdr *)(bp->rp + hdrlen);
 
 		/*
-		 * Do not stop this session - blocking here
-		 * implies that etherread is blocked.
+		 * Look for a conversation structure for this port and address, or
+		 * match the retunnel part, or match on the raw flag.
 		 */
-		grec = c->ptcl;
-		if(memcmp(ip->dst, grec->hoa, sizeof ip->dst) == 0){
-			grepdin++;
-			grebdin += BLEN(bp);
-			gredownlink(c, bp);
-			qunlock(proto);
-			return;
-		}
+		for(p = proto->conv; *p; p++) {
+			c = *p;
 
-		if(memcmp(ip->src, grec->hoa, sizeof ip->src) == 0){
-			grepuin++;
-			grebuin += BLEN(bp);
-			greuplink(c, bp);
-			qunlock(proto);
-			return;
+			if(c->inuse == 0)
+				continue;
+
+			/*
+			 * Do not stop this session - blocking here
+			 * implies that etherread is blocked.
+			 */
+			grec = c->ptcl;
+			if(memcmp(ip->dst, grec->hoa, sizeof ip->dst) == 0){
+				grepdin++;
+				grebdin += BLEN(bp);
+				gredownlink(c, bp);
+				qunlock(proto);
+				return;
+			}
+
+			if(memcmp(ip->src, grec->hoa, sizeof ip->src) == 0){
+				grepuin++;
+				grebuin += BLEN(bp);
+				greuplink(c, bp);
+				qunlock(proto);
+				return;
+			}
 		}
 	}
+
 
 	/*
 	 * when we get here, none of the forwarding tunnels matched.  now