[Bug 217620] ipfw flow specification parsing

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Tue Mar 7 21:39:19 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=217620

            Bug ID: 217620
           Summary: ipfw flow specification parsing
           Product: Base System
           Version: 11.0-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs at FreeBSD.org
          Reporter: lutz at donnerhacke.de

Parsing of port-numbers explicitly set to "0" does not work.
BTW: The whole code is broken for parsing named ports.

How to repeat:
root at server:~ # ipfw table test create type
flow:src-ip,src-port,dst-ip,dst-port,proto
root at server:~ # ipfw table all info
--- table(test), set(0) ---
 kindex: 1, type: flow:src-ip,proto,src-port,dst-ip,dst-port
 references: 0, valtype: legacy
 algorithm: flow:hash
 items: 0, size: 296
root at server:~ # ipfw table test add 0.0.0.0,0,0,0.0.0.0,0
ipfw: Unknown service: 0

After the patch:
root at server:~ # ipfw table test add 0.0.0.0,0,0,0.0.0.0,0
added: 0.0.0.0,0,0,0.0.0.0,0 0
root at server:~ # ipfw table test list
--- table(test), set(0) ---
0.0.0.0,0,0,0.0.0.0,0 0

--- sbin/ipfw/ipfw2.h   (revision 314807)
+++ sbin/ipfw/ipfw2.h   (working copy)
@@ -1236,12 +1269,11 @@
                        if ((p = strchr(arg, ',')) != NULL)
                                *p++ = '\0';

-                       if ((port = htons(strtol(arg, NULL, 10))) == 0) {
+                       port = htons(strtol(arg, &pp, 10));
+                       if(*pp != '\0') {
                                if ((sent = getservbyname(arg, NULL)) == NULL)
-                                       errx(EX_DATAERR, "Unknown service: %s",
-                                           arg);
-                               else
-                                       key = sent->s_port;
+                                       errx(EX_DATAERR, "Unknown service: %s",
arg);
+                               port = sent->s_port;
                        }

                        tfe->sport = port;
@@ -1280,12 +1312,11 @@
                        if ((p = strchr(arg, ',')) != NULL)
                                *p++ = '\0';

-                       if ((port = htons(strtol(arg, NULL, 10))) == 0) {
+                       port = htons(strtol(arg, &pp, 10));
+                       if (*pp != '\0') {
                                if ((sent = getservbyname(arg, NULL)) == NULL)
-                                       errx(EX_DATAERR, "Unknown service: %s",
-                                           arg);
-                               else
-                                       key = sent->s_port;
+                                       errx(EX_DATAERR, "Unknown service: %s",
arg);
+                               port = sent->s_port;
                        }

                        tfe->dport = port;

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list