blob: dd67db6e535189ee175f64862ed42c80dbd0dc52 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
--- sys/netpfil/pf/pf_norm.c.orig
+++ sys/netpfil/pf/pf_norm.c
@@ -1216,6 +1216,8 @@
if (sizeof(struct ip6_hdr) + IPV6_MAXPACKET < m->m_pkthdr.len)
goto drop;
+again:
+ h = mtod(m, struct ip6_hdr *);
plen = ntohs(h->ip6_plen);
/* jumbo payload option not supported */
if (plen == 0)
@@ -1286,6 +1288,8 @@
return (PF_PASS);
fragment:
+ if (pd->flags & PFDESC_IP_REAS)
+ return (PF_DROP);
if (sizeof(struct ip6_hdr) + plen > m->m_pkthdr.len)
goto shortpkt;
@@ -1303,7 +1307,7 @@
return (PF_DROP);
pd->flags |= PFDESC_IP_REAS;
- return (PF_PASS);
+ goto again;
shortpkt:
REASON_SET(reason, PFRES_SHORT);
|