diff mbox series

[net] ipvs: remove IPS_NAT_MASK check to fix passive FTP

Message ID 20180225202918.538-1-ja@ssi.bg
State Accepted
Delegated to: Pablo Neira
Headers show
Series [net] ipvs: remove IPS_NAT_MASK check to fix passive FTP | expand

Commit Message

Julian Anastasov Feb. 25, 2018, 8:29 p.m. UTC
The IPS_NAT_MASK check in 4.12 replaced previous check for nfct_nat()
which was needed to fix a crash in 2.6.36-rc, see
commit 7bcbf81a2296 ("ipvs: avoid oops for passive FTP").
But as IPVS does not set the IPS_SRC_NAT and IPS_DST_NAT bits,
checking for IPS_NAT_MASK prevents PASV response to be properly
mangled and blocks the transfer. Remove the check as it is not
needed after 3.12 commit 41d73ec053d2 ("netfilter: nf_conntrack:
make sequence number adjustments usuable without NAT") which
changes nfct_nat() with nfct_seqadj() and especially after 3.13
commit b25adce16064 ("ipvs: correct usage/allocation of seqadj
ext in ipvs").

Thanks to Li Shuang and Florian Westphal for reporting the problem!

Reported-by: Li Shuang <shuali@redhat.com>
Fixes: be7be6e161a2 ("netfilter: ipvs: fix incorrect conflict resolution")
Signed-off-by: Julian Anastasov <ja@ssi.bg>
---
 net/netfilter/ipvs/ip_vs_ftp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Simon Horman Feb. 28, 2018, 3:25 p.m. UTC | #1
On Sun, Feb 25, 2018 at 10:29:18PM +0200, Julian Anastasov wrote:
> The IPS_NAT_MASK check in 4.12 replaced previous check for nfct_nat()
> which was needed to fix a crash in 2.6.36-rc, see
> commit 7bcbf81a2296 ("ipvs: avoid oops for passive FTP").
> But as IPVS does not set the IPS_SRC_NAT and IPS_DST_NAT bits,
> checking for IPS_NAT_MASK prevents PASV response to be properly
> mangled and blocks the transfer. Remove the check as it is not
> needed after 3.12 commit 41d73ec053d2 ("netfilter: nf_conntrack:
> make sequence number adjustments usuable without NAT") which
> changes nfct_nat() with nfct_seqadj() and especially after 3.13
> commit b25adce16064 ("ipvs: correct usage/allocation of seqadj
> ext in ipvs").
> 
> Thanks to Li Shuang and Florian Westphal for reporting the problem!
> 
> Reported-by: Li Shuang <shuali@redhat.com>
> Fixes: be7be6e161a2 ("netfilter: ipvs: fix incorrect conflict resolution")
> Signed-off-by: Julian Anastasov <ja@ssi.bg>

Acked-by: Simon Horman <horms@verge.net.au>
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pablo Neira Ayuso Feb. 28, 2018, 6:50 p.m. UTC | #2
On Wed, Feb 28, 2018 at 04:25:38PM +0100, Simon Horman wrote:
> On Sun, Feb 25, 2018 at 10:29:18PM +0200, Julian Anastasov wrote:
> > The IPS_NAT_MASK check in 4.12 replaced previous check for nfct_nat()
> > which was needed to fix a crash in 2.6.36-rc, see
> > commit 7bcbf81a2296 ("ipvs: avoid oops for passive FTP").
> > But as IPVS does not set the IPS_SRC_NAT and IPS_DST_NAT bits,
> > checking for IPS_NAT_MASK prevents PASV response to be properly
> > mangled and blocks the transfer. Remove the check as it is not
> > needed after 3.12 commit 41d73ec053d2 ("netfilter: nf_conntrack:
> > make sequence number adjustments usuable without NAT") which
> > changes nfct_nat() with nfct_seqadj() and especially after 3.13
> > commit b25adce16064 ("ipvs: correct usage/allocation of seqadj
> > ext in ipvs").
> > 
> > Thanks to Li Shuang and Florian Westphal for reporting the problem!
> > 
> > Reported-by: Li Shuang <shuali@redhat.com>
> > Fixes: be7be6e161a2 ("netfilter: ipvs: fix incorrect conflict resolution")
> > Signed-off-by: Julian Anastasov <ja@ssi.bg>
> 
> Acked-by: Simon Horman <horms@verge.net.au>

Applied, thanks!
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox series

Patch

diff --git a/net/netfilter/ipvs/ip_vs_ftp.c b/net/netfilter/ipvs/ip_vs_ftp.c
index 3e17d32..58d5d05 100644
--- a/net/netfilter/ipvs/ip_vs_ftp.c
+++ b/net/netfilter/ipvs/ip_vs_ftp.c
@@ -260,7 +260,7 @@  static int ip_vs_ftp_out(struct ip_vs_app *app, struct ip_vs_conn *cp,
 		buf_len = strlen(buf);
 
 		ct = nf_ct_get(skb, &ctinfo);
-		if (ct && (ct->status & IPS_NAT_MASK)) {
+		if (ct) {
 			bool mangled;
 
 			/* If mangling fails this function will return 0