summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/kernel/syscalls_state.go
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2020-04-09 19:16:46 -0700
committergVisor bot <gvisor-bot@google.com>2020-04-09 19:16:46 -0700
commit78126611e61e26269d804dd18a5229820c4ddced (patch)
tree8c1e421faa3173cb2a95187e39ee9201fd7c3b7e /pkg/sentry/kernel/syscalls_state.go
parentc560bfd1a8cd61c869e180c6cc7bb917fc29e92e (diff)
parent867eeb18d8c65019fb755194d5bdf768837f07a8 (diff)
Merge pull request #2253 from amscanne:nogo
PiperOrigin-RevId: 305807868
Diffstat (limited to 'pkg/sentry/kernel/syscalls_state.go')
-rw-r--r--pkg/sentry/kernel/syscalls_state.go36
1 files changed, 27 insertions, 9 deletions
diff --git a/pkg/sentry/kernel/syscalls_state.go b/pkg/sentry/kernel/syscalls_state.go
index 00358326b..90f890495 100644
--- a/pkg/sentry/kernel/syscalls_state.go
+++ b/pkg/sentry/kernel/syscalls_state.go
@@ -14,16 +14,34 @@
package kernel
-import "fmt"
+import (
+ "fmt"
-// afterLoad is invoked by stateify.
-func (s *SyscallTable) afterLoad() {
- otherTable, ok := LookupSyscallTable(s.OS, s.Arch)
- if !ok {
- // Couldn't find a reference?
- panic(fmt.Sprintf("syscall table not found for OS %v Arch %v", s.OS, s.Arch))
+ "gvisor.dev/gvisor/pkg/abi"
+ "gvisor.dev/gvisor/pkg/sentry/arch"
+)
+
+// syscallTableInfo is used to reload the SyscallTable.
+//
+// +stateify savable
+type syscallTableInfo struct {
+ OS abi.OS
+ Arch arch.Arch
+}
+
+// saveSt saves the SyscallTable.
+func (tc *TaskContext) saveSt() syscallTableInfo {
+ return syscallTableInfo{
+ OS: tc.st.OS,
+ Arch: tc.st.Arch,
}
+}
- // Copy the table.
- *s = *otherTable
+// loadSt loads the SyscallTable.
+func (tc *TaskContext) loadSt(sti syscallTableInfo) {
+ st, ok := LookupSyscallTable(sti.OS, sti.Arch)
+ if !ok {
+ panic(fmt.Sprintf("syscall table not found for OS %v, Arch %v", sti.OS, sti.Arch))
+ }
+ tc.st = st // Save the table reference.
}