naccyde / rpms / iproute

Forked from rpms/iproute 6 months ago
Clone

Blame SOURCES/0070-ss-Review-ssfilter.patch

8def76
From da77e40e234599218a3d61434abb5af2815d72a7 Mon Sep 17 00:00:00 2001
8def76
From: Andrea Claudi <aclaudi@redhat.com>
8def76
Date: Sun, 2 Jun 2019 16:06:23 +0200
8def76
Subject: [PATCH] ss: Review ssfilter
8def76
8def76
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1698401
8def76
Upstream Status: iproute2.git commit 38d209ecf2ae9
8def76
8def76
commit 38d209ecf2ae966b9b25de4acb60cdffb0e06ced
8def76
Author: Phil Sutter <phil@nwl.cc>
8def76
Date:   Tue Aug 14 14:18:06 2018 +0200
8def76
8def76
    ss: Review ssfilter
8def76
8def76
    The original problem was ssfilter rejecting single expressions if
8def76
    enclosed in braces, such as:
8def76
8def76
    | sport = 22 or ( dport = 22 )
8def76
8def76
    This is fixed by allowing 'expr' to be an 'exprlist' enclosed in braces.
8def76
    The no longer required recursion in 'exprlist' being an 'exprlist'
8def76
    enclosed in braces is dropped.
8def76
8def76
    In addition to that, a few other things are changed:
8def76
8def76
    * Remove pointless 'null' prefix in 'appled' before 'exprlist'.
8def76
    * For simple equals matches, '=' operator was required for ports but not
8def76
      allowed for hosts. Make this consistent by making '=' operator
8def76
      optional in both cases.
8def76
8def76
    Reported-by: Samuel Mannehed <samuel@cendio.se>
8def76
    Fixes: b2038cc0b2403 ("ssfilter: Eliminate shift/reduce conflicts")
8def76
    Signed-off-by: Phil Sutter <phil@nwl.cc>
8def76
    Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
8def76
---
8def76
 misc/ssfilter.y | 36 +++++++++++++++++++++---------------
8def76
 1 file changed, 21 insertions(+), 15 deletions(-)
8def76
8def76
diff --git a/misc/ssfilter.y b/misc/ssfilter.y
8def76
index 88d4229a9b241..0413dddaa7584 100644
8def76
--- a/misc/ssfilter.y
8def76
+++ b/misc/ssfilter.y
8def76
@@ -42,24 +42,22 @@ static void yyerror(char *s)
8def76
 %nonassoc '!'
8def76
 
8def76
 %%
8def76
-applet: null exprlist
8def76
+applet: exprlist
8def76
         {
8def76
-                *yy_ret = $2;
8def76
-                $$ = $2;
8def76
+                *yy_ret = $1;
8def76
+                $$ = $1;
8def76
         }
8def76
         | null
8def76
         ;
8def76
+
8def76
 null:   /* NOTHING */ { $$ = NULL; }
8def76
         ;
8def76
+
8def76
 exprlist: expr
8def76
         | '!' expr
8def76
         {
8def76
                 $$ = alloc_node(SSF_NOT, $2);
8def76
         }
8def76
-        | '(' exprlist ')'
8def76
-        {
8def76
-                $$ = $2;
8def76
-        }
8def76
         | exprlist '|' expr
8def76
         {
8def76
                 $$ = alloc_node(SSF_OR, $1);
8def76
@@ -77,13 +75,21 @@ exprlist: expr
8def76
         }
8def76
         ;
8def76
 
8def76
-expr:	DCOND HOSTCOND
8def76
+eq:	'='
8def76
+	| /* nothing */
8def76
+	;
8def76
+
8def76
+expr:	'(' exprlist ')'
8def76
+	{
8def76
+		$$ = $2;
8def76
+	}
8def76
+	| DCOND eq HOSTCOND
8def76
         {
8def76
-		$$ = alloc_node(SSF_DCOND, $2);
8def76
+		$$ = alloc_node(SSF_DCOND, $3);
8def76
         }
8def76
-        | SCOND HOSTCOND
8def76
+        | SCOND eq HOSTCOND
8def76
         {
8def76
-		$$ = alloc_node(SSF_SCOND, $2);
8def76
+		$$ = alloc_node(SSF_SCOND, $3);
8def76
         }
8def76
         | DPORT GEQ HOSTCOND
8def76
         {
8def76
@@ -101,7 +107,7 @@ expr:	DCOND HOSTCOND
8def76
         {
8def76
                 $$ = alloc_node(SSF_NOT, alloc_node(SSF_D_GE, $3));
8def76
         }
8def76
-        | DPORT '=' HOSTCOND
8def76
+        | DPORT eq HOSTCOND
8def76
         {
8def76
 		$$ = alloc_node(SSF_DCOND, $3);
8def76
         }
8def76
@@ -126,7 +132,7 @@ expr:	DCOND HOSTCOND
8def76
         {
8def76
                 $$ = alloc_node(SSF_NOT, alloc_node(SSF_S_GE, $3));
8def76
         }
8def76
-        | SPORT '=' HOSTCOND
8def76
+        | SPORT eq HOSTCOND
8def76
         {
8def76
 		$$ = alloc_node(SSF_SCOND, $3);
8def76
         }
8def76
@@ -134,7 +140,7 @@ expr:	DCOND HOSTCOND
8def76
         {
8def76
 		$$ = alloc_node(SSF_NOT, alloc_node(SSF_SCOND, $3));
8def76
         }
8def76
-        | DEVNAME '=' DEVCOND
8def76
+        | DEVNAME eq DEVCOND
8def76
         {
8def76
 		$$ = alloc_node(SSF_DEVCOND, $3);
8def76
         }
8def76
@@ -142,7 +148,7 @@ expr:	DCOND HOSTCOND
8def76
         {
8def76
 		$$ = alloc_node(SSF_NOT, alloc_node(SSF_DEVCOND, $3));
8def76
         }
8def76
-        | FWMARK '=' MARKMASK
8def76
+        | FWMARK eq MARKMASK
8def76
         {
8def76
                 $$ = alloc_node(SSF_MARKMASK, $3);
8def76
         }
8def76
-- 
8def76
2.20.1
8def76