Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Apr 2017 08:11:48 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 218968] [patch] [libalias] unbreak translation of transit PPtP/GRE for "nat global" case
Message-ID:  <bug-218968-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help

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

            Bug ID: 218968
           Summary: [patch] [libalias] unbreak translation of transit
                    PPtP/GRE for "nat global" case
           Product: Base System
           Version: 11.0-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Keywords: patch
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: eugen@freebsd.org
          Keywords: patch

Created attachment 182189
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=182189&action=edit
fix libalias for LibAliasOutTry() case

Assume we have several ipfw nat (or natd) instances and utilize "nat global"
feature to select alias_address for outgoing packets that already have
corresponding state in one of aliasing instances. This standard setup works
just fine for ICMP, UDP, TCP and SCTP packes but not for others. For example,
outgoing PPtP/GRE packets always get alias_address of latest configured
instance no matter whether such packet has corresponding state or not.

The bug is in ProtoAliasOut() function that ignores its "create" argument and
performs translation regardless of its value. This static function is called
only by LibAliasOutLocked() function and only for packers other than ICMP, UDP,
TCP and SCTP passing its "create" argument unmodified.

For every NAT instance, "ipfw nat global" code calls LibAliasOutTry() with
create=0 that leads to LibAliasOutLocked() call and then to ProtoAliasOut()
that returns PKT_ALIAS_OK. So, "ipfw nat global" translates
non-ICP/UDP/TCP/SCTP packet using last configured instance (first in the chain)
and that may be wrong.

Attached patch makes ProtoAliasOut() respect its "create" argument and stop
translation in case of create == 0 with return of PKT_ALIAS_IGNORED.

We have only two consumers of LibAliasOutLocked() in the source tree calling it
with create != 1: mentioned "ipfw nat global" code and similar natd code having
same problem. The patch fixes it too. All other consumers of
LibAliasOutLocked() call it with create = 1 and patch is "no-op" for such case.

For example, the patch unbreaks translation of outgoing transit PPtP/GRE
connections for described configuration.

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


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-218968-8>