From: Denys Fedoryshchenko <nuclearcat@nuclearcat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Florian Westphal <fw@strlen.de>,
Linux Kernel Network Developers <netdev@vger.kernel.org>,
Pablo Neira Ayuso <pablo@netfilter.org>,
Patrick McHardy <kaber@trash.net>,
Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>,
netfilter-devel@vger.kernel.org, coreteam@netfilter.org,
linux-kernel@vger.kernel.org, netdev-owner@vger.kernel.org
Subject: Re: KASAN, xt_TCPMSS finally found nasty use-after-free bug? 4.10.8
Date: Sun, 02 Apr 2017 15:25:06 +0300 [thread overview]
Message-ID: <4442718191e17f0ff91bf1359da6d631@nuclearcat.com> (raw)
In-Reply-To: <1491135593.10124.9.camel@edumazet-glaptop3.roam.corp.google.com>
On 2017-04-02 15:19, Eric Dumazet wrote:
> On Sun, 2017-04-02 at 04:54 -0700, Eric Dumazet wrote:
>> On Sun, 2017-04-02 at 13:45 +0200, Florian Westphal wrote:
>> > Eric Dumazet <eric.dumazet@gmail.com> wrote:
>> > > - for (i = sizeof(struct tcphdr); i <= tcp_hdrlen - TCPOLEN_MSS; i += optlen(opt, i)) {
>> > > + for (i = sizeof(struct tcphdr); i < tcp_hdrlen - TCPOLEN_MSS; i += optlen(opt, i)) {
>> > > if (opt[i] == TCPOPT_MSS && opt[i+1] == TCPOLEN_MSS) {
>> > > u_int16_t oldmss;
>> >
>> > maybe I am low on caffeeine but this looks fine, for tcp header with
>> > only tcpmss this boils down to "20 <= 24 - 4" so we acccess offsets 20-23 which seems ok.
>>
>> I am definitely low on caffeine ;)
>>
>> An issue in this function is that we might add the missing MSS option,
>> without checking that TCP options are already full.
>>
>> But this should not cause a KASAN splat, only some malformed TCP
>> packet
>>
>> (tcph->doff would wrap)
>
> Something like that maybe.
>
> diff --git a/net/netfilter/xt_TCPMSS.c b/net/netfilter/xt_TCPMSS.c
> index
> 27241a767f17b4b27d24095a31e5e9a2d3e29ce4..1465aaf0e3a15d69d105d0a50b0429b11b6439d3
> 100644
> --- a/net/netfilter/xt_TCPMSS.c
> +++ b/net/netfilter/xt_TCPMSS.c
> @@ -151,7 +151,9 @@ tcpmss_mangle_packet(struct sk_buff *skb,
> */
> if (len > tcp_hdrlen)
> return 0;
> -
> + /* tcph->doff is 4 bits wide, do not wrap its value to 0 */
> + if (tcp_hdrlen >= 15 * 4)
> + return 0;
> /*
> * MSS Option not found ?! add it..
> */
I will add also WARN_ON_ONCE(tcp_hdrlen >= 15 * 4) before, for
curiosity, if this condition are triggered. Is it fine like that?
next prev parent reply other threads:[~2017-04-02 12:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-02 7:43 KASAN, xt_TCPMSS finally found nasty use-after-free bug? 4.10.8 Denys Fedoryshchenko
2017-04-02 11:24 ` Eric Dumazet
2017-04-02 11:45 ` Florian Westphal
2017-04-02 11:51 ` Denys Fedoryshchenko
2017-04-02 11:54 ` Eric Dumazet
2017-04-02 12:19 ` Eric Dumazet
2017-04-02 12:25 ` Denys Fedoryshchenko [this message]
2017-04-02 12:32 ` Eric Dumazet
2017-04-02 16:52 ` Denys Fedoryshchenko
2017-04-02 17:14 ` Eric Dumazet
2017-04-02 17:26 ` Eric Dumazet
2017-04-03 8:10 ` Denys Fedoryshchenko
2017-04-03 12:09 ` Eric Dumazet
2017-04-03 12:14 ` Denys Fedoryshchenko
2017-04-03 12:24 ` Eric Dumazet
2017-04-03 17:55 ` [PATCH net] netfilter: xt_TCPMSS: add more sanity tests on tcph->doff Eric Dumazet
2017-04-08 20:24 ` Pablo Neira Ayuso
2017-04-20 18:14 ` Denys Fedoryshchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4442718191e17f0ff91bf1359da6d631@nuclearcat.com \
--to=nuclearcat@nuclearcat.com \
--cc=coreteam@netfilter.org \
--cc=eric.dumazet@gmail.com \
--cc=fw@strlen.de \
--cc=kaber@trash.net \
--cc=kadlec@blackhole.kfki.hu \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev-owner@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).