From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl0-f50.google.com ([209.85.160.50]:44382 "EHLO mail-pl0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751956AbeCNPCV (ORCPT ); Wed, 14 Mar 2018 11:02:21 -0400 Received: by mail-pl0-f50.google.com with SMTP id 9-v6so1836877ple.11 for ; Wed, 14 Mar 2018 08:02:21 -0700 (PDT) Date: Wed, 14 Mar 2018 08:02:17 -0700 From: Stephen Hemminger To: xeb@mail.ru Cc: netdev@vger.kernel.org Subject: Fw: [Bug 199109] New: pptp: kernel printk "recursion detected", and then reboot itself Message-ID: <20180314080217.1f461de3@xeon-e3> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: netdev-owner@vger.kernel.org List-ID: 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.