public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Jonathan Toppins <jtoppins@cumulusnetworks•com>
To: Eric Dumazet <eric.dumazet@gmail•com>,
	Crestez Dan Leonard <cdleonard@gmail•com>
Cc: netdev@vger•kernel.org
Subject: Re: [RFC] tcp md5 use of alloc_percpu
Date: Wed, 22 Oct 2014 17:35:12 -0400	[thread overview]
Message-ID: <54482310.5090406@cumulusnetworks.com> (raw)
In-Reply-To: <1414005158.9031.22.camel@edumazet-glaptop2.roam.corp.google.com>

On 10/22/14, 3:12 PM, Eric Dumazet wrote:
> On Wed, 2014-10-22 at 21:55 +0300, Crestez Dan Leonard wrote:
>> Hello,
>>
>> It seems that the TCP MD5 feature allocates a percpu struct
>> tcp_md5sig_pool and uses part of that memory for a scratch buffer to
>> do crypto on. Here is the relevant code:
>>
>> static int tcp_v4_md5_hash_pseudoheader(struct tcp_md5sig_pool *hp,
>>                                         __be32 daddr, __be32 saddr,
>> int nbytes)
>> {
>>         struct tcp4_pseudohdr *bp;
>>         struct scatterlist sg;
>>
>>         bp = &hp->md5_blk.ip4;
>>
>>         /*
>>          * 1. the TCP pseudo-header (in the order: source IP address,
>>          * destination IP address, zero-padded protocol number, and
>>          * segment length)
>>          */
>>         bp->saddr = saddr;
>>         bp->daddr = daddr;
>>         bp->pad = 0;
>>         bp->protocol = IPPROTO_TCP;
>>         bp->len = cpu_to_be16(nbytes);
>>
>>         sg_init_one(&sg, bp, sizeof(*bp));
>>         return crypto_hash_update(&hp->md5_desc, &sg, sizeof(*bp));
>> }
>>
>> sg_init_one does virt_addr on the pointer which assumes it is directly
>> accessible. But the tcp_md5sig_pool pointer comes from alloc_percpu
>> which can return memory from the vmalloc area after the
>> pcpu_first_chunk is exhausted. This looks wrong to me. I'm am getting
>> crashes on mips and I believe this to be the cause.

I can confirm this created an issue on our powerpc based switches. My
solution in our 3.2 kernel was to allocate the buffer on the stack. I
like this solution better.

  reply	other threads:[~2014-10-22 21:35 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-22 18:55 [RFC] tcp md5 use of alloc_percpu Crestez Dan Leonard
2014-10-22 19:12 ` Eric Dumazet
2014-10-22 21:35   ` Jonathan Toppins [this message]
2014-10-22 23:05   ` Crestez Dan Leonard
2014-10-24  9:33     ` Herbert Xu
2014-10-22 21:53 ` David Miller
2014-10-22 23:38 ` Jonathan Toppins
2014-10-23  1:00   ` Crestez Dan Leonard
2014-10-23  1:47     ` Eric Dumazet
2014-10-23  4:40 ` David Ahern
2014-10-23  5:23   ` Eric Dumazet
2014-10-23  5:38     ` Eric Dumazet
2014-10-23  6:58       ` Jonathan Toppins
2014-10-23 13:21         ` Eric Dumazet
2014-10-23 14:43           ` Eric Dumazet
2014-10-23 16:17             ` Crestez Dan Leonard
2014-10-23 19:22               ` Eric Dumazet
2014-10-23 16:33             ` [PATCH net] tcp: md5: percpu tcp_md5sig_pool must not span pages Eric Dumazet
2014-10-23 19:34               ` Eric Dumazet
2014-10-23 19:58               ` [PATCH v2 net] tcp: md5: do not use alloc_percpu() Eric Dumazet
2014-10-23 20:44                 ` David Ahern
2014-10-23 22:57                   ` Eric Dumazet
2014-10-23 23:36                     ` David Ahern
2014-10-24  3:45                 ` David Ahern
2014-10-25 20:11                 ` David Miller
2014-10-23 14:46           ` [RFC] tcp md5 use of alloc_percpu Crestez Dan Leonard
2014-10-23 13:03       ` Crestez Dan Leonard

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=54482310.5090406@cumulusnetworks.com \
    --to=jtoppins@cumulusnetworks$(echo .)com \
    --cc=cdleonard@gmail$(echo .)com \
    --cc=eric.dumazet@gmail$(echo .)com \
    --cc=netdev@vger$(echo .)kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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