You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.0 KiB
47 lines
1.0 KiB
// Program psx-signals validates that the psx mechanism can coexist
|
|
// with Go use of signals. This is an unprivilaged program derived
|
|
// from the sample code provided in this bug report:
|
|
//
|
|
// https://bugzilla.kernel.org/show_bug.cgi?id=210533
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"kernel.org/pub/linux/libs/security/libcap/psx"
|
|
)
|
|
|
|
const maxSig = 10
|
|
const prSetKeepCaps = 8
|
|
|
|
func main() {
|
|
sig := make(chan os.Signal, maxSig)
|
|
signal.Notify(sig, os.Interrupt)
|
|
|
|
fmt.Print("Toggling KEEP_CAPS ")
|
|
for i := 0; i < maxSig; i++ {
|
|
fmt.Print(".")
|
|
_, _, err := psx.Syscall3(syscall.SYS_PRCTL, prSetKeepCaps, uintptr(i&1), 0)
|
|
if err != 0 {
|
|
log.Fatalf("[%d] attempt to set KEEPCAPS (to %d) failed: %v", i, i%2, err)
|
|
}
|
|
}
|
|
|
|
fmt.Println(" done")
|
|
fmt.Print("Wait 1 second to see if unwanted signals arrive...")
|
|
// Confirm no signals are delivered.
|
|
select {
|
|
case <-time.After(1 * time.Second):
|
|
break
|
|
case info := <-sig:
|
|
log.Fatalf("signal received: %v", info)
|
|
}
|
|
fmt.Println(" none arrived")
|
|
fmt.Println("PASSED")
|
|
}
|