Hi,

I noticed pfctl crashes on segfault when anchors go too deep:

--8<-----------------------------------
$ cat ~/pf.conf | head -5
anchor foo {
anchor foo {
anchor foo {
anchor foo {
anchor foo {

$ grep anchor ~/pf.conf | wc -l
      66
$ /sbin/pfctl -nf ~/pf.conf
Segmentation fault (core dumped)
----------------------------------->8--

It seems there is no check we fit into pfctl.astack[]. The attached
patch resolves this issue:

--8<-----------------------------------
$ ./pfctl -nf ~/pf.conf
pfctl: pfa_anchor: anchors too deep

$ grep anchor ~/pf2.conf | wc -l
      63
$ ./pfctl -nf ~/pf2.conf
$
----------------------------------->8--

Petr
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index 15555e7ce21..5e19c5f39da 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -846,6 +846,8 @@ pfa_anchor  : '{'
 
                        /* steping into a brace anchor */
                        pf->asd++;
+                       if (pf->asd >= PFCTL_ANCHOR_STACK_DEPTH)
+                               errx(1, "pfa_anchor: anchors too deep");
                        pf->bn++;
                        pf->brace = 1;
 

Reply via email to