summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2018-09-13 14:06:34 -0700
committerShentubot <shentubot@google.com>2018-09-13 14:07:47 -0700
commit9c6b38e2952650cba32e21d0719bcb0ffdc10860 (patch)
treea93d712bdecf88bb2a08462279d675fadda73d08
parente2d79480f57d96ea90bb73b241f248573c2a33fc (diff)
Format struct itimerspec
PiperOrigin-RevId: 212874745 Change-Id: I0c3e8e6a9e8976631cee03bf0b8891b336ddb8c8
-rw-r--r--pkg/sentry/strace/linux64.go8
-rw-r--r--pkg/sentry/strace/strace.go14
-rw-r--r--pkg/sentry/strace/syscalls.go9
3 files changed, 26 insertions, 5 deletions
diff --git a/pkg/sentry/strace/linux64.go b/pkg/sentry/strace/linux64.go
index 7a1eb581d..63851246c 100644
--- a/pkg/sentry/strace/linux64.go
+++ b/pkg/sentry/strace/linux64.go
@@ -240,8 +240,8 @@ var linuxAMD64 = SyscallMap{
220: makeSyscallInfo("semtimedop", Hex, Hex, Hex, Hex),
221: makeSyscallInfo("fadvise64", Hex, Hex, Hex, Hex),
222: makeSyscallInfo("timer_create", Hex, Hex, Hex),
- 223: makeSyscallInfo("timer_settime", Hex, Hex, Hex, Hex),
- 224: makeSyscallInfo("timer_gettime", Hex, Hex),
+ 223: makeSyscallInfo("timer_settime", Hex, Hex, ItimerSpec, PostItimerSpec),
+ 224: makeSyscallInfo("timer_gettime", Hex, PostItimerSpec),
225: makeSyscallInfo("timer_getoverrun", Hex),
226: makeSyscallInfo("timer_delete", Hex),
227: makeSyscallInfo("clock_settime", Hex, Timespec),
@@ -303,8 +303,8 @@ var linuxAMD64 = SyscallMap{
283: makeSyscallInfo("timerfd_create", Hex, Hex),
284: makeSyscallInfo("eventfd", Hex),
285: makeSyscallInfo("fallocate", Hex, Hex, Hex, Hex),
- 286: makeSyscallInfo("timerfd_settime", Hex, Hex, Hex, Hex),
- 287: makeSyscallInfo("timerfd_gettime", Hex, Hex),
+ 286: makeSyscallInfo("timerfd_settime", Hex, Hex, ItimerSpec, PostItimerSpec),
+ 287: makeSyscallInfo("timerfd_gettime", Hex, PostItimerSpec),
288: makeSyscallInfo("accept4", Hex, PostSockAddr, SockLen, SockFlags),
289: makeSyscallInfo("signalfd4", Hex, Hex, Hex, Hex),
290: makeSyscallInfo("eventfd2", Hex, Hex),
diff --git a/pkg/sentry/strace/strace.go b/pkg/sentry/strace/strace.go
index 03b4a350a..539e665d2 100644
--- a/pkg/sentry/strace/strace.go
+++ b/pkg/sentry/strace/strace.go
@@ -224,6 +224,16 @@ func itimerval(t *kernel.Task, addr usermem.Addr) string {
return fmt.Sprintf("%#x {interval=%s, value=%s}", addr, interval, value)
}
+func itimerspec(t *kernel.Task, addr usermem.Addr) string {
+ if addr == 0 {
+ return "null"
+ }
+
+ interval := timespec(t, addr)
+ value := timespec(t, addr+usermem.Addr(binary.Size(linux.Timespec{})))
+ return fmt.Sprintf("%#x {interval=%s, value=%s}", addr, interval, value)
+}
+
func stringVector(t *kernel.Task, addr usermem.Addr) string {
vec, err := t.CopyInVector(addr, slinux.ExecMaxElemSize, slinux.ExecMaxTotalSize)
if err != nil {
@@ -296,6 +306,8 @@ func (i *SyscallInfo) pre(t *kernel.Task, args arch.SyscallArguments, maximumBlo
output = append(output, utimensTimespec(t, args[arg].Pointer()))
case ItimerVal:
output = append(output, itimerval(t, args[arg].Pointer()))
+ case ItimerSpec:
+ output = append(output, itimerspec(t, args[arg].Pointer()))
case Timeval:
output = append(output, timeval(t, args[arg].Pointer()))
case Utimbuf:
@@ -362,6 +374,8 @@ func (i *SyscallInfo) post(t *kernel.Task, args arch.SyscallArguments, rval uint
output[arg] = timespec(t, args[arg].Pointer())
case PostItimerVal:
output[arg] = itimerval(t, args[arg].Pointer())
+ case PostItimerSpec:
+ output[arg] = itimerspec(t, args[arg].Pointer())
case Timeval:
output[arg] = timeval(t, args[arg].Pointer())
case Rusage:
diff --git a/pkg/sentry/strace/syscalls.go b/pkg/sentry/strace/syscalls.go
index 4513d1ba6..770a0d2b9 100644
--- a/pkg/sentry/strace/syscalls.go
+++ b/pkg/sentry/strace/syscalls.go
@@ -132,10 +132,17 @@ const (
// ItimerVal is a pointer to a struct itimerval.
ItimerVal
- // ItimerVal is a pointer to a struct itimerval, formatted after
+ // PostItimerVal is a pointer to a struct itimerval, formatted after
// syscall execution.
PostItimerVal
+ // ItimerSpec is a pointer to a struct itimerspec.
+ ItimerSpec
+
+ // PostItimerSpec is a pointer to a struct itimerspec, formatted after
+ // syscall execution.
+ PostItimerSpec
+
// Timeval is a pointer to a struct timeval, formatted before and after
// syscall execution.
Timeval