aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2017-04-14 05:12:01 +0000
committerCy Schubert <cy@FreeBSD.org>2017-04-14 05:12:01 +0000
commit64d57d7db8f096c70e469f7f589fa4ee06eac339 (patch)
tree8ccb75fcf6009254da093b1805bd6ee9e0523d78 /sys/contrib
parent666bd4d2532230dee4ace395edb4c1cfea06748d (diff)
downloadsrc-64d57d7db8f096c70e469f7f589fa4ee06eac339.tar.gz
src-64d57d7db8f096c70e469f7f589fa4ee06eac339.zip
Keep state incorrectly assumes keep frags. This is counter to the
ipfilter man pages. This also currently restricts keep frags to only when keep state is used, which is redundant because keep state currently assumes keep frags. This commit fixes this. To the user this change means that to maintain the current behaviour one must add keep frags to any ipfilter keep state rule (as documented in the man pages). This patch also allows the flexability to specify and use keep frags separate from keep state, as documented in an example in ipf.conf.5, instead of the currently broken behaviour. Relnotes: yes
Notes
Notes: svn path=/head/; revision=316810
Diffstat (limited to 'sys/contrib')
-rw-r--r--sys/contrib/ipfilter/netinet/fil.c2
-rw-r--r--sys/contrib/ipfilter/netinet/ip_state.c3
2 files changed, 3 insertions, 2 deletions
diff --git a/sys/contrib/ipfilter/netinet/fil.c b/sys/contrib/ipfilter/netinet/fil.c
index 1c2a90fdeea4..91a7f9069b91 100644
--- a/sys/contrib/ipfilter/netinet/fil.c
+++ b/sys/contrib/ipfilter/netinet/fil.c
@@ -2786,7 +2786,7 @@ ipf_firewall(fin, passp)
* If the rule has "keep frag" and the packet is actually a fragment,
* then create a fragment state entry.
*/
- if ((pass & (FR_KEEPFRAG|FR_KEEPSTATE)) == FR_KEEPFRAG) {
+ if (pass & FR_KEEPFRAG) {
if (fin->fin_flx & FI_FRAG) {
if (ipf_frag_new(softc, fin, pass) == -1) {
LBUMP(ipf_stats[out].fr_bnfr);
diff --git a/sys/contrib/ipfilter/netinet/ip_state.c b/sys/contrib/ipfilter/netinet/ip_state.c
index 34a64f02eb8a..c6b3059934a6 100644
--- a/sys/contrib/ipfilter/netinet/ip_state.c
+++ b/sys/contrib/ipfilter/netinet/ip_state.c
@@ -3414,7 +3414,8 @@ ipf_state_check(fin, passp)
* If this packet is a fragment and the rule says to track fragments,
* then create a new fragment cache entry.
*/
- if ((fin->fin_flx & FI_FRAG) && FR_ISPASS(is->is_pass))
+ if (((fin->fin_flx & FI_FRAG) && FR_ISPASS(is->is_pass)) &&
+ ((is->is_pass & FR_KEEPFRAG)))
(void) ipf_frag_new(softc, fin, is->is_pass);
/*