netdev
[Top] [All Lists]

Re: ERRATA Re: [PATCH] fix for netfilter/nat/pppoe crashes (hopefully)

To: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
Subject: Re: ERRATA Re: [PATCH] fix for netfilter/nat/pppoe crashes (hopefully)
From: Harald Welte <laforge@xxxxxxxxxxxx>
Date: Thu, 2 Aug 2001 00:00:46 -0300
Cc: Alexey Kuznetsov <kuznet@xxxxxxxxxxxxx>, davem@xxxxxxxxxx (Dave Miller), netfilter-devel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx, Marc Boucher <marc@xxxxxxx>
In-reply-to: <E15SBXD-0002uf-00@localhost>; from rusty@rustcorp.com.au on Thu, Aug 02, 2001 at 04:00:24PM +1000
Mail-followup-to: Harald Welte <laforge@xxxxxxxxxxxx>, Rusty Russell <rusty@xxxxxxxxxxxxxxx>, Alexey Kuznetsov <kuznet@xxxxxxxxxxxxx>, davem@xxxxxxxxxx (Dave Miller), netfilter-devel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx, Marc Boucher <marc@xxxxxxx>
References: <200107312226.CAA00407@mops.inr.ac.ru> <E15SBXD-0002uf-00@localhost>
Sender: owner-netdev@xxxxxxxxxxx
User-agent: Mutt/1.3.17i
On Thu, Aug 02, 2001 at 04:00:24PM +1000, Rusty Russell wrote:

> And this is the killer: line 385 (it's redundant: we check this inside
> get_tuple anyway):
> 
>       /* Are they talking about one of our connections? */
>       if (inner->ihl * 4 + 8 > datalen
>           || !get_tuple(inner, datalen, &origtuple, innerproto)) {
> 
> So, we will always have 8 protocol bytes in the inner packet.  This is
> enough to contain the source and destinations ports (TCP/UDP) or ICMP
> id, so we're not writing over the end of the packet...

Well, Rusty, I have to agree with Marc. 

Look at ip_nat_proto_tcp.c:tcp_mainp_pkt(). It just assumes that we have 
a tcp header with up to 18 bytes in length, as it overwrites the TCP
header's checksum.

> Please find them and hit them hard...

well... next time I am in .au ;)

> Rusty.

-- 
Live long and prosper
- Harald Welte / laforge@xxxxxxxxxxxx                http://www.gnumonks.org
============================================================================
GCS/E/IT d- s-: a-- C+++ UL++++$ P+++ L++++$ E--- W- N++ o? K- w--- O- M- 
V-- PS+ PE-- Y+ PGP++ t++ 5-- !X !R tv-- b+++ DI? !D G+ e* h+ r% y+(*)

<Prev in Thread] Current Thread [Next in Thread>