On Mon, Aug 14, 2023 at 12:02 PM Chandrasekhar R <craman2...@gmail.com> wrote:
>
> My understanding currently is sudo sets up a signal handler in pre_exec and 
> another signal handler later on which is tied into its main event loop.
> Go gets initialized when the pre_exec signal handler is used and it adds 
> rt_sigaction(SIGCHLD..) with the SA_ONSTACK flag as mentioned here.
> Then after the sudo command (echo) gets executed, the SIGCHLD is received by 
> one of the go threads which then runs the pre_exec signal handler which is 
> the old and nonexistent signal handler.
>
> My approach is to block the Go threads from receiving the SIGCHLD signal and 
> thus not let the signal to be handled by the old signal handler.

I don't quite understand the scenario you are describing.  What
matters is the signal handler.  When Go adds the SA_ONSTACK flag, it
doesn't change the signal handler.  Which thread a signal is delivered
to does not affect which signal handler gets run.

Ian


> On Friday, August 11, 2023 at 10:05:48 PM UTC-7 Ian Lance Taylor wrote:
>>
>> On Fri, Aug 11, 2023 at 11:51 AM Chandrasekhar R <crama...@gmail.com> wrote:
>> >
>> > I am planning on using a pam module written in Go (specifically 
>> > https://github.com/uber/pam-ussh) . When I run a script which calls sudo 
>> > continuously with an echo command, I am noticing zombie/defunct processes 
>> > starting to pop up.
>> >
>> > On doing strace, I noticed that the SIGCHLD gets delivered to one of the 
>> > threads created when Go gets initialized (i.e. the shared object gets 
>> > loaded).
>> >
>> > I tried to add one level of indirection by having a separate C code which 
>> > creates a new thread, sets the signal mask to block SIGCHLD and then use 
>> > dlopen to open the shared object created using cgo. I am still facing the 
>> > same issue, is there any pointer on how to fix this issue? I think this 
>> > would be a wide issue across all PAM modules written using cgo.
>>
>> As far as I know the specific thread that receives a SIGCHLD signal is
>> fairly random. What matters is not the thread that receives the
>> signal, but the signal handler that is installed. Signal handlers are
>> process-wide. What signal handler is running when you get a SIGCHLD?
>> What signal handler do you expect to run?
>>
>> Ian
>
> --
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/7b395394-da12-4b19-9e07-5c8f7e91dcabn%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcWhtpjyXALJoMFVjVWkfA4kntsxjKbK-LJxoSzJ9z%2BLAw%40mail.gmail.com.

Reply via email to