diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-01 23:13:11 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-01 23:13:11 +0300 |
| commit | bd544509846fb7e1882aa466d24aea937c2b2804 (patch) | |
| tree | 5e9a31a7cc6a7256b52ce4e842d9bb72f2baed80 /internal/c | |
| parent | 8251307ac3187b346ed12e9a54d9bf6d7cba7e53 (diff) | |
fix(classify): mq_timedsend returns status, not bytes — make ret UNCLASSIFIED
mq_timedsend(2)/mq_send(3) return 0 on success or -1 on error; the
payload size msg_len is an INPUT argument, never the return value. It was
wrongly listed in retClassifications as WriteClassified, which made
bytesFromRet attribute its 0 return as "bytes written" (the stats engine
WriteClassified path). Remove it so its return stays UNCLASSIFIED,
consistent with its POSIX mq sibling mq_timedreceive (which legitimately
stays ReadClassified because it returns the received byte count). This is
the exact same defect just fixed for SysV msgsnd (5057bd9) and mirrors
the msgrcv/msgsnd asymmetry.
Regenerated tracepoints/docs accordingly and updated the pre-existing
classify unit test and the TestPosixMqBasic integration assertion: the
mq_timedsend send no longer asserts a write byte count (now expects 0),
while mq_timedreceive keeps its received-byte-count assertion. Verified:
mage generate idempotent, mage build OK, internal/generate tests pass.
TestPosixMqBasic skips in this sandbox (mq_open: permission denied) but
compiles with the corrected assertions.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'internal/c')
| -rw-r--r-- | internal/c/generated_tracepoints.c | 4 | ||||
| -rw-r--r-- | internal/c/generated_tracepoints_result.txt | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/internal/c/generated_tracepoints.c b/internal/c/generated_tracepoints.c index 8e3f996..4ec7b86 100644 --- a/internal/c/generated_tracepoints.c +++ b/internal/c/generated_tracepoints.c @@ -2593,7 +2593,7 @@ int handle_sys_enter_mq_timedsend(struct syscall_trace_enter *ctx) { return 0; } -/// sys_exit_mq_timedsend is a struct ret_event (WRITE_CLASSIFIED) (kind=ret) +/// sys_exit_mq_timedsend is a struct ret_event (UNCLASSIFIED) (kind=ret) SEC("tracepoint/syscalls/sys_exit_mq_timedsend") int handle_sys_exit_mq_timedsend(struct syscall_trace_exit *ctx) { __u32 pid, tid; @@ -2613,7 +2613,7 @@ int handle_sys_exit_mq_timedsend(struct syscall_trace_exit *ctx) { ev->tid = tid; ev->time = bpf_ktime_get_boot_ns(); ev->ret = ctx->ret; - ev->ret_type = WRITE_CLASSIFIED; + ev->ret_type = UNCLASSIFIED; bpf_ringbuf_submit(ev, 0); return 0; diff --git a/internal/c/generated_tracepoints_result.txt b/internal/c/generated_tracepoints_result.txt index 0a88f30..3804441 100644 --- a/internal/c/generated_tracepoints_result.txt +++ b/internal/c/generated_tracepoints_result.txt @@ -544,7 +544,7 @@ sys_exit_mq_getsetattr is a struct ret_event (UNCLASSIFIED) (kind=ret) sys_exit_mq_notify is a struct ret_event (UNCLASSIFIED) (kind=ret) sys_exit_mq_open is a struct ret_event (UNCLASSIFIED) (kind=ret) sys_exit_mq_timedreceive is a struct ret_event (READ_CLASSIFIED) (kind=ret) -sys_exit_mq_timedsend is a struct ret_event (WRITE_CLASSIFIED) (kind=ret) +sys_exit_mq_timedsend is a struct ret_event (UNCLASSIFIED) (kind=ret) sys_exit_mq_unlink is a struct ret_event (UNCLASSIFIED) (kind=ret) sys_exit_mremap is a struct ret_event (UNCLASSIFIED) (kind=ret) sys_exit_mseal is a struct ret_event (UNCLASSIFIED) (kind=ret) |
