summaryrefslogtreecommitdiff
path: root/internal/generate/classify.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-31 19:04:44 +0300
committerPaul Buetow <paul@buetow.org>2026-05-31 19:04:44 +0300
commitc3177bd82c16429c1bb246d19af76012479f0c01 (patch)
treef71fc68ce009295690a723b49881eed74bae0c48 /internal/generate/classify.go
parentc6a89452bd6872a380d4ce0dc9ec35ea0c66ef9e (diff)
getxattrat: READ-classify return for xattr-get family consistency
getxattrat(2) (Linux 6.13+) returns the xattr value size in bytes, exactly like getxattr/lgetxattr/fgetxattr, but its exit was classified UNCLASSIFIED, so its read bytes were dropped from I/O totals. Classify it as ReadClassified and regenerate the BPF handler (ret_type now READ_CLASSIFIED). Path extraction (args[1], after the dirfd) and the name-not-captured-as-path behaviour were already correct. Update the docs ReadClassified list and the retclassify expectation, and add the first xattr integration coverage: an ioworkload scenario that sets then getxattrat-reads a user xattr on tmpfs, plus a test that asserts enter_getxattrat captures the file path (not the xattr name) and accounts the returned value size as read bytes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'internal/generate/classify.go')
-rw-r--r--internal/generate/classify.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/internal/generate/classify.go b/internal/generate/classify.go
index f85cb93..3746bd9 100644
--- a/internal/generate/classify.go
+++ b/internal/generate/classify.go
@@ -588,6 +588,9 @@ var retClassifications = map[string]RetClassification{
"getdents": ReadClassified,
"getdents64": ReadClassified,
"getxattr": ReadClassified,
+ // getxattrat (Linux 6.13+) returns the size in bytes of the xattr value,
+ // exactly like getxattr/lgetxattr/fgetxattr, so it is a read byte-count.
+ "getxattrat": ReadClassified,
"lgetxattr": ReadClassified,
"listxattr": ReadClassified,
"llistxattr": ReadClassified,