From 59451a70fc82b3b6b5522986b08b4c16cda24301 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 29 May 2026 10:19:03 +0300 Subject: test(generate): lock in gettimeofday classification Audit of gettimeofday(2) confirmed the existing implementation is correct: it is classified KindNull (userspace timeval/timezone pointer args, not fd/path) and FamilyTime alongside its clock_gettime/ settimeofday/time siblings; its exit emits a plain ret_event carrying the int 0/-1 return as UNCLASSIFIED. mage generate produces no diff. Add lock-in tests mirroring prior syscall audits: - family_test.go asserts sys_enter/exit_gettimeofday => FamilyTime - retclassify_test.go asserts gettimeofday exit stays UNCLASSIFIED Co-Authored-By: Claude Opus 4.8 --- internal/generate/family_test.go | 5 +++++ internal/generate/retclassify_test.go | 3 +++ 2 files changed, 8 insertions(+) diff --git a/internal/generate/family_test.go b/internal/generate/family_test.go index 98deab5..e2d80b8 100644 --- a/internal/generate/family_test.go +++ b/internal/generate/family_test.go @@ -14,6 +14,11 @@ func TestClassifySyscallFamily(t *testing.T) { {"sys_enter_execve", FamilyProcess}, {"sys_enter_rt_sigaction", FamilySignals}, {"sys_enter_clock_gettime", FamilyTime}, + // gettimeofday(2) gets wall-clock time via a userspace timeval/timezone + // pointer; it is a time/clock syscall and shares FamilyTime with its + // sibling clock_gettime/settimeofday/time syscalls. + {"sys_enter_gettimeofday", FamilyTime}, + {"sys_exit_gettimeofday", FamilyTime}, {"sys_enter_sched_yield", FamilySched}, {"sys_enter_openat", FamilyFS}, {"sys_enter_epoll_wait", FamilyPolling}, diff --git a/internal/generate/retclassify_test.go b/internal/generate/retclassify_test.go index 04120ee..1bbde51 100644 --- a/internal/generate/retclassify_test.go +++ b/internal/generate/retclassify_test.go @@ -44,6 +44,9 @@ func TestClassifyRetUnclassified(t *testing.T) { "openat", "close", "rename", "unlink", "fcntl", "dup", "dup2", "dup3", "mkdir", "rmdir", "chmod", "chown", "chdir", "stat", "lseek", "truncate", "fallocate", "mmap", "fsync", "flock", "recvmmsg", "sendmmsg", + // gettimeofday(2) returns int 0/-1 (no byte count); its exit carries a + // plain ret_event and must stay UNCLASSIFIED, not a read/write transfer. + "gettimeofday", } for _, name := range unclassified { if got := ClassifyRet("sys_exit_" + name); got != Unclassified { -- cgit v1.2.3