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.
next prev parent 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