Fw: [Bug 199109] New: pptp: kernel printk "recursion detected", and then reboot itself

2 messages, 2 authors, 2018-03-15 · open the first message on its own page

Fw: [Bug 199109] New: pptp: kernel printk "recursion detected", and then reboot itself

From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2018-03-14 15:02:21


Begin forwarded message:

Date: Wed, 14 Mar 2018 06:56:09 +0000
From: bugzilla-daemon@bugzilla.kernel.org
To: stephen@networkplumber.org
Subject: [Bug 199109] New: pptp: kernel printk "recursion detected", and then reboot itself


https://bugzilla.kernel.org/show_bug.cgi?id=199109

            Bug ID: 199109
           Summary: pptp: kernel printk "recursion detected", and then
                    reboot itself
           Product: Networking
           Version: 2.5
    Kernel Version: 4.9.77
          Hardware: Mips32
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: high
          Priority: P1
         Component: IPV4
          Assignee: stephen@networkplumber.org
          Reporter: xuheng333@zoho.com
        Regression: No

Created attachment 274715
  --> https://bugzilla.kernel.org/attachment.cgi?id=274715&action=edit  
system log

Use openwrt LEDE, (gcc version 5.5.0 (OpenWrt GCC 5.5.0 r5932-9c4fe10) ).
When use pptp, make WAN(eth1) down and then make WAN(eth1) up, pptp will redial
itself. Do this in a loop.

After a while, kernel print "recursion detected" and "net_ratelimit: 49422
callbacks suppressed", print this many times, then system reboot.

When add more printk in driver "driver/net/ppp/ppp_generic.c", fond it fall in
loop in "static void __ppp_xmit_process(struct ppp *ppp)", which called by
"static void __ppp_channel_push(struct channel *pch)". 
__ppp_channel_push() locked ppp->xmit_recursion, and loop for long time( while
(!ppp->xmit_pending && (skb = skb_dequeue(&ppp->file.xq))) ppp_send_frame(ppp,
skb); ). Some other thread want to lock ppp->xmit_recursion, but failed.


static void __ppp_channel_push(struct channel *pch)
{
        struct sk_buff *skb;
        struct ppp *ppp;

        spin_lock_bh(&pch->downl);
        if (pch->chan) {
                while (!skb_queue_empty(&pch->file.xq)) {
                        skb = skb_dequeue(&pch->file.xq);
                        if (!pch->chan->ops->start_xmit(pch->chan, skb)) {
                                /* put the packet back and try again later */
                                skb_queue_head(&pch->file.xq, skb);
                                break;
                        }
                }
        } else {
                /* channel got deregistered */
                skb_queue_purge(&pch->file.xq);
        }
        spin_unlock_bh(&pch->downl);
        /* see if there is anything from the attached unit to be sent */
        if (skb_queue_empty(&pch->file.xq)) {
                ppp = pch->ppp;
                if (ppp)
                        __ppp_xmit_process(ppp);
        }
}

-- 
You are receiving this mail because:
You are the assignee for the bug.

Re: Fw: [Bug 199109] New: pptp: kernel printk "recursion detected", and then reboot itself

From: Guillaume Nault <hidden>
Date: 2018-03-15 17:51:55

On Wed, Mar 14, 2018 at 08:02:17AM -0700, Stephen Hemminger wrote:

Begin forwarded message:

Date: Wed, 14 Mar 2018 06:56:09 +0000
From: bugzilla-daemon@bugzilla.kernel.org
To: stephen@networkplumber.org
Subject: [Bug 199109] New: pptp: kernel printk "recursion detected", and then reboot itself


https://bugzilla.kernel.org/show_bug.cgi?id=199109

            Bug ID: 199109
           Summary: pptp: kernel printk "recursion detected", and then
                    reboot itself
           Product: Networking
           Version: 2.5
    Kernel Version: 4.9.77
          Hardware: Mips32
                OS: Linux
              Tree: Mainline
            Status: NEW
          Severity: high
          Priority: P1
         Component: IPV4
          Assignee: stephen@networkplumber.org
          Reporter: xuheng333@zoho.com
        Regression: No

Created attachment 274715
  --> https://bugzilla.kernel.org/attachment.cgi?id=274715&action=edit  
system log

Use openwrt LEDE, (gcc version 5.5.0 (OpenWrt GCC 5.5.0 r5932-9c4fe10) ).
When use pptp, make WAN(eth1) down and then make WAN(eth1) up, pptp will redial
itself. Do this in a loop.

After a while, kernel print "recursion detected" and "net_ratelimit: 49422
callbacks suppressed", print this many times, then system reboot.

When add more printk in driver "driver/net/ppp/ppp_generic.c", fond it fall in
loop in "static void __ppp_xmit_process(struct ppp *ppp)", which called by
"static void __ppp_channel_push(struct channel *pch)". 
__ppp_channel_push() locked ppp->xmit_recursion, and loop for long time( while
(!ppp->xmit_pending && (skb = skb_dequeue(&ppp->file.xq))) ppp_send_frame(ppp,
skb); ). Some other thread want to lock ppp->xmit_recursion, but failed.
Hi Xuheng,

Are you sure that your PPTP packets aren't routed back to your PPP
interface? What's the IP address of the PPTP server?

Regards,

Guillaume
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help