From: Jarek Poplawski <jarkao2@o2.pl>
To: Paul Mackerras <paulus@samba.org>
Cc: David Miller <davem@davemloft.net>,
kaber@trash.net, poemann@gmail.com, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org
Subject: Re: kernel BUG at net/core/skbuff.c in linux-2.6.21-rc6
Date: Wed, 18 Apr 2007 14:42:33 +0200 [thread overview]
Message-ID: <20070418124233.GA2218@ff.dom.local> (raw)
In-Reply-To: <17953.30429.220756.818283@cargo.ozlabs.ibm.com>
Hi,
I didn't analyse this bug report but probably it
is nearly connected with one of the bugs visible in
a log from this submit:
http://bugzilla.kernel.org/show_bug.cgi?id=8132
On 15-04-2007 02:50, Paul Mackerras wrote:
> David Miller writes:
>
>> Here is Patrick McHardy's patch:
>
> So this doesn't change process_input_packet(), which treats the case
> where the first byte is 0xff (PPP_ALLSTATIONS) but the second byte is
> 0x03 (PPP_UI) as indicating a packet with a PPP protocol number of
> 0xff. Arguably that's wrong since PPP protocol 0xff is reserved, and
> the RFC does envision the possibility of receiving frames where the
> control field has values other than 0x03.
>
> Therefore I think this patch is probably better. Could people try it
> out and let me know if it fixes the problem?
>
> Paul.
>
> diff --git a/drivers/net/ppp_async.c b/drivers/net/ppp_async.c
> index 933e2f3..caabbc4 100644
> --- a/drivers/net/ppp_async.c
> +++ b/drivers/net/ppp_async.c
> @@ -802,9 +802,9 @@ process_input_packet(struct asyncppp *ap)
>
> /* check for address/control and protocol compression */
> p = skb->data;
> - if (p[0] == PPP_ALLSTATIONS && p[1] == PPP_UI) {
> + if (p[0] == PPP_ALLSTATIONS) {
> /* chop off address/control */
> - if (skb->len < 3)
> + if (p[1] != PPP_UI || skb->len < 3)
> goto err;
> p = skb_pull(skb, 2);
> }
Let's look farther:
> proto = p[0];
> if (proto & 1) {
> /* protocol is compressed */
> skb_push(skb, 1)[0] = 0;
BTW - about Patrick's patch:
skb_push seems to be dependent here on the 1-st char of
skb->data, if above (p[0] != PPP_ALLSTATIONS), but on the
3-rd char otherwise (after skb_pull). But, Patrick's patch
reserves the place for this, looking always at 1-st char
(buf[0]) independently of PPP_ALLSTATIONS char presence,
or otherwise - always treating this char as protocol char.
It looks safe because of PPP_ALLSTATION current value,
but isn't too understandable.
On the other hand, without any reservation in the
ppp_async_input for the (buf[0] == PPP_ALLSTATIONS) case,
probably 4-byte alignement isn't achieved as planned.
> } else {
> if (skb->len < 2)
> goto err;
> proto = (proto << 8) + p[1];
> if (proto == PPP_LCP)
> async_lcp_peek(ap, p, skb->len, 1);
> }
>
> /* queue the frame to be processed */
> skb->cb[0] = ap->state;
> skb_queue_tail(&ap->rqueue, skb);
> ap->rpkt = NULL;
> ap->state = 0;
> return;
>
> err:
> /* frame had an error, remember that, reset SC_TOSS & SC_ESCAPE */
> ap->state = SC_PREV_ERROR;
> if (skb) {
> /* make skb appear as freshly allocated */
Probably this isn't always true and here the problem
started...
> skb_trim(skb, 0);
> skb_reserve(skb, - skb_headroom(skb));
Isn't here lost e.g. NET_SKB_PAD probably reserved by
dev_alloc_skb?
On the other hand - this kind of pad can very good hide
similar reservation problems in many other places - maybe
it should be omitted or somehow counted in WARNs when some
debugging options are active?
Regards,
Jarek P.
next prev parent reply other threads:[~2007-04-18 12:37 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <19061b0b0704071111m65c70d1ei736de86ad2f09a82@mail.gmail.com>
[not found] ` <20070407.234708.93384523.davem@davemloft.net>
[not found] ` <19061b0b0704081315g3593d652s70e9b5b0dcfcf966@mail.gmail.com>
[not found] ` <19061b0b0704100219w4749e5fby9b400edca9bf334d@mail.gmail.com>
[not found] ` <9a8748490704100425t34ebafcdq866a923df80b9aca@mail.gmail.com>
[not found] ` <19061b0b0704112218j13688c16xc755d66147f8fe6a@mail.gmail.com>
2007-04-12 5:43 ` kernel BUG at net/core/skbuff.c in linux-2.6.21-rc6 Patrick McHardy
2007-04-13 23:16 ` David Miller
2007-04-14 6:00 ` Herbert Xu
2007-04-14 16:49 ` Paul Mackerras
2007-04-14 17:04 ` David Miller
2007-04-14 17:10 ` Patrick McHardy
2007-04-15 0:50 ` Paul Mackerras
2007-04-15 1:05 ` Paul Mackerras
2007-04-19 20:07 ` David Miller
2007-04-18 12:42 ` Jarek Poplawski [this message]
2007-04-18 21:35 ` Herbert Xu
2007-04-19 8:49 ` Bartek
2007-04-19 11:41 ` Herbert Xu
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=20070418124233.GA2218@ff.dom.local \
--to=jarkao2@o2.pl \
--cc=davem@davemloft.net \
--cc=kaber@trash.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=paulus@samba.org \
--cc=poemann@gmail.com \
/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).