diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-29 10:19:03 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-29 10:19:03 +0300 |
| commit | 59451a70fc82b3b6b5522986b08b4c16cda24301 (patch) | |
| tree | ff0df154b477ac2e095aadc878f4ac2e0752ce96 | |
| parent | 49b16417d9f52c8ddb48b158b73ccda31fd26982 (diff) | |
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 <noreply@anthropic.com>
| -rw-r--r-- | internal/generate/family_test.go | 5 | ||||
| -rw-r--r-- | internal/generate/retclassify_test.go | 3 |
2 files changed, 8 insertions, 0 deletions
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 { |
