diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-04-23 12:01:38 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-04-23 12:01:38 -0700 |
commit | ded5c963ae5c2a5d37508f8d122031a2cd60d642 (patch) | |
tree | f783eaa99b910a7a276df47cfb039572a668e183 /pkg/sentry/kernel | |
parent | 1481499fe27157ad2716c00682f6ad819115a6c7 (diff) | |
parent | 5eb41c8fbabac090251fbfb43bd9c814124aa575 (diff) |
Merge pull request #1819 from lubinszARM:pr_signal_2
PiperOrigin-RevId: 308100771
Diffstat (limited to 'pkg/sentry/kernel')
-rw-r--r-- | pkg/sentry/kernel/task_signals.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/pkg/sentry/kernel/task_signals.go b/pkg/sentry/kernel/task_signals.go index f07de2089..7d25e98f7 100644 --- a/pkg/sentry/kernel/task_signals.go +++ b/pkg/sentry/kernel/task_signals.go @@ -263,6 +263,19 @@ func (t *Task) deliverSignalToHandler(info *arch.SignalInfo, act arch.SignalAct) if t.haveSavedSignalMask { mask = t.savedSignalMask } + + // Set up the restorer. + // x86-64 should always uses SA_RESTORER, but this flag is optional on other platforms. + // Please see the linux code as reference: + // linux/arch/x86/kernel/signal.c:__setup_rt_frame() + // If SA_RESTORER is not configured, we can use the sigreturn trampolines + // the vdso provides instead. + // Please see the linux code as reference: + // linux/arch/arm64/kernel/signal.c:setup_return() + if act.Flags&linux.SA_RESTORER == 0 { + act.Restorer = t.MemoryManager().VDSOSigReturn() + } + if err := t.Arch().SignalSetup(st, &act, info, &alt, mask); err != nil { return err } |