Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 51889 - "/etc/init.d/rp-pppoe stop" causes pppd to go into an inifinite loop
Summary: "/etc/init.d/rp-pppoe stop" causes pppd to go into an inifinite loop
Status: RESOLVED DUPLICATE of bug 57238
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Unspecified (show other bugs)
Hardware: All Linux
: High critical (vote)
Assignee: Gentoo Dialup Developers
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-05-23 19:38 UTC by Patrick McLean
Modified: 2005-07-17 13:06 UTC (History)
3 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
fixes the problem by ignoring new signals in the SIGTERM and SIGHUP signal handlers (pppd-no-infinite-loop-on-terminate.patch,888 bytes, patch)
2004-05-23 19:44 UTC, Patrick McLean
Details | Diff
The patch for this issue from the pppd developers (pppd-signals.patch,338 bytes, patch)
2004-05-25 13:23 UTC, Patrick McLean
Details | Diff
"unediting" the 2.4.2 patch that "went in" (quoting Paul Mackerras) (ppp-2.4.2-signal-handler.patch,447 bytes, patch)
2004-07-23 05:01 UTC, Axel Dyks
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Patrick McLean gentoo-dev 2004-05-23 19:39:00 UTC
pppd goes into an infinite loop reporting "[pppd] Terminating on signal 15." in the syslogs when I try to kill a pppoe connection with /etc/init.d/rp-pppoe stop

Reproducible: Always
Steps to Reproduce:
1. start a pppoe connection (sympatico as isp in this case) /etc/init.d/rp-pppoe start
2. stop pppoe connection (sympatico as isp in this case) /etc/init.d/rp-pppoe stop


Actual Results:  
Hundreds of messages like this in logs: "[pppd] Terminating on signal 15."

and pppd never dies.
Comment 1 Patrick McLean gentoo-dev 2004-05-23 19:44:13 UTC
Created attachment 31919 [details, diff]
fixes the problem by ignoring new signals in the SIGTERM and SIGHUP signal handlers

Looking at the pppd source code, it calls term() on SIGTERM then proceeds to
send SIGTERM to all processses in it's group, to kill all the children. It
recieves this SIGTERM and does it again, etc. It does a similar thing for
SIGHUP. This patch makes it ignore new SIGTERM signals recieved while killing
the group, I tested it and it works fine with this patch.
Comment 2 Patrick McLean gentoo-dev 2004-05-25 13:23:43 UTC
Created attachment 32020 [details, diff]
The patch for this issue from the pppd developers

This is the patch that the ppp developers put in for this issue.
Comment 3 Axel Dyks 2004-07-22 17:41:57 UTC
Interesting!

I think this is the same problem, I am struggling
with at the moment, though I am not ussing ppp/pppoe but
ppp/pptp to set up an on-demand vpn tunnel to a
watchguard firebox (tricky enough :-).

I had to patch the kernel (MPPE_MPPC-patch) and
emerge an "~x86" ebuild of ppp to get things
"almost running". Configuration is now:
  * kernel: linux-2.4.26-gentoo-r5
  * kernel-patch: linux-2.4.26-mppe-mppc-1.0.patch.gz 
  * ppp-ebuild: ppp-2.4.2-r2 (~x86)
  * pptpclient-ebuild: pptpclient-1.3.1
    same problem with pptpclient-1.4.0 (~x86)

"Almost Running" because of the problem/result you have posted
  Hundreds of messages like this in logs: "[pppd] Terminating on signal 15."
ByTheWay: On my gentoo box ppp finally "terminates" (with a segmentation fault)

 * The problem does NOT occur if pptp has not been forked yet.
 * The problem does NOT occur if the child process pptp is killed
   instead of pppd.

So far I haven't found an exact match of my problem on the internet
only some (maybe) close related info and a patch that addresses
"hundreds of '[pppd] Terminating on signal 2' messages" when
stopping pppd my pressing  ^C (SIGINT) before detaching from
controlling tty.

Smells a lot like "incorrect signal handling" to me.
I will check out both patches (yours/the ppp-developer's and the SIGINT)
and recapitulate what Richard Stevens wrote about signal handling... :-)

Greets and thank you Patrick for your infos and the patch!

Axel

--
"You will never walk alone..." 
Comment 4 Axel Dyks 2004-07-23 05:01:35 UTC
Created attachment 36001 [details, diff]
"unediting" the 2.4.2 patch that "went in" (quoting Paul Mackerras)

Following the "known cause"-link on  
  http://pptpclient.sourceforge.net/howto-diagnosis.phtml#endless_signal_2
I found a posting from Paul Mackerras to the "linux-ppp" mailing list
(on 2004-01-24) that states that a patch was committed to 2.4.2 that
should not have been checked in.
The funny thing is that nobody has removed it until today...

Removing this patch by "unediting" main.c (kill_my_pg) like proposed by Paul
produces the patch I have attached (same as Patrick's) and fixes the problem.

Fixing the "ppp-2.4.2-r2.ebuild" requires the following steps:
  1. add "ppp-2.4.2-signal-handler.patch" to "net-dialup/ppp/files/2.4.2/"
  2. add "epatch ${FILESDIR}/${PV}/ppp-2.4.2-signal-handler.patch"
     to "ppp-2.4.2-r2.ebuild" [src_unpack()] or create a new release,
     i. e. "ppp-2.4.2-r3.ebuild"
  3. Either set the timeout in "/etc/init.d/net.ppp0" or rather
     "net-dialup/ppp/files/2.4.2/net.ppp0" from "sleep 1" to "sleep 5"
     or delete the stuff after "# Try to kill pppd repeatedly ..." 

Somebody who runs a 2.6-kernel (I'm running 2.4) should check if
this "patch of a patch" is also valid there.
(I read something about a changed signal handling for SIGTRAP...)

Greets,

Axel (XL)
Comment 5 Axel Dyks 2004-07-23 14:02:05 UTC
I just found a duplicate of this bug (#57238)
Comment 6 Heinrich Wendel (RETIRED) gentoo-dev 2004-08-02 01:27:40 UTC

*** This bug has been marked as a duplicate of 57238 ***