|
|
Message-ID: <CAA3hR4cSZvf5P7-jYL+ZHrWX9EBrdpRUi36MaV9p7o1yRKGp5w@mail.gmail.com>
Date: Thu, 11 Oct 2018 17:14:59 +0200
From: Rabbitstack <rabbitstack7@...il.com>
To: Rich Felker <dalias@...c.org>
Cc: musl@...ts.openwall.com
Subject: Re: setrlimit hangs the process
Hi
I managed to reproduce the problem with minimal code snippet and can
confirm it's definitely the Go stdlib signal handler that messes things up.
Here's the code:
package main
import (
bpflib "github.com/iovisor/gobpf/elf"
"os/signal"
"os"
"fmt"
)
func main() {
sig := make(chan os.Signal)
signal.Notify(sig, os.Kill, os.Interrupt)
mod := bpflib.NewModule("/tmp/sched.o")
fmt.Println("loading ebpf module")
err := mod.Load(nil)
if err != nil {
panic(err)
}
err = mod.EnableKprobes(50)
if err != nil {
panic(err)
}
fmt.Println("loaded ebpf module")
rxChan := make(chan []byte)
lostChan := make(chan uint64)
pmap, err := bpflib.InitPerfMap(
mod,
"sched",
rxChan,
lostChan,
)
if err != nil {
panic(err)
}
go func() {
for {
select {
case pe := <-rxChan:
fmt.Println(pe)
case l := <-lostChan:
fmt.Println(l)
}
}
}()
pmap.PollStart()
fmt.Println("listening on ebpf map")
<-sig
}
The main thread hangs right after the call to module constructor.
On Tue, Oct 9, 2018 at 10:40 PM Rich Felker <dalias@...c.org> wrote:
> On Tue, Oct 09, 2018 at 10:36:41PM +0200, Szabolcs Nagy wrote:
> > * Rabbitstack <rabbitstack7@...il.com> [2018-10-09 21:37:06 +0200]:
> > > Should we raise an issue in Go upstream repository since there is
> nothing
> > > actionable from musl side?
> > >
> >
> > have you figured out where the siprocmask came from?
> > it might not be the go runtime but some c lib that you linked in.
>
> Well the sigset_t was created in Go code or via some other code that
> bypasses libc. The libc functions cannot create a sigset_t with the
> implementation-internal signals masked.
>
> > > El vie., 5 oct. 2018 2:47, Rich Felker <dalias@...c.org> escribió:
> > > > >
> > > > > Here is the bug:
> > > > >
> > > > > 6208 rt_sigprocmask(SIG_SETMASK, ~[HUP INT QUIT ILL TRAP ABRT BUS
> FPE
> > > > SEGV TERM STKFLT CHLD PROF SYS RTMIN RT_1], <unfinished ...>
> >
> > the go runtime should not make this call, it probably comes from
> > somewhere else.
> >
> > i think you should try to create a minimal reproducer go code
> > that makes this syscall.
>
> I looked at the Go implementations of the functions for sigset_t
> manipulation and sigprocmask. They all bypass libc. So either it's an
> error to use them at all in programs that link with libc, or a bug in
> Go that they don't respect SIGRTMIN, etc.
>
> Rich
>
Content of type "text/html" skipped
Download attachment "sched.o" of type "application/octet-stream" (7560 bytes)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.