I was curious if I can get it to work for the Linux kernel. Here’s a prototype:
Critically, the Linux kernel’s macro-based wrapfest of the kmalloc* functions meant that automatic instrumentation is not the best approach, as by the time we actually call the inner kmalloc, the compiler wouldn’t see the original call expression anymore.
For that, the builtin approach actually makes a lot of sense. I found a builtin with this design worked best:
[...] `__builtin_alloc_token_infer(<malloc-args>, ...)` to allow
compile-time querying of the token ID, where the builtin arguments
mirror those normally passed to any allocation function. The argument
expressions are unevaluated operands. For type-based token modes, the
same type inference logic is used as for untyped allocation calls.
The current Clang implementation is found here: GitHub - melver/llvm-project at alloc-token - in particular, the builtin can be used independently of -fsanitize=alloc-token, but otherwise shares all the inference (frontend) and token ID calculation (middle-end).
With all that, I can boot that kernel, and /proc/slabinfo shows me:
/proc/slabinfo
kmalloc-part-15-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-15-4k 0 4 12288 2 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-15-2k 5 10 6144 5 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-15-1k 11 20 3072 10 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-15-512 39 42 1536 21 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-15-256 24 84 768 21 4 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-15-128 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-15-64 95 128 256 32 2 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-15-32 51 75 160 25 1 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-15-16 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-15-8 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-15-192 13 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-15-96 196 216 224 36 2 : tunables 0 0 0 : slabdata 6 6 0
kmalloc-part-14-8k 2 3 24576 1 8 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-14-4k 7 8 12288 2 8 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-14-2k 13 25 6144 5 8 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-part-14-1k 237 240 3072 10 8 : tunables 0 0 0 : slabdata 24 24 0
kmalloc-part-14-512 10 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-14-256 42 42 768 21 4 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-14-128 28 42 384 21 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-14-64 257 288 256 32 2 : tunables 0 0 0 : slabdata 9 9 0
kmalloc-part-14-32 496 500 160 25 1 : tunables 0 0 0 : slabdata 20 20 0
kmalloc-part-14-16 25 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-14-8 2 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-14-192 26 42 384 21 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-14-96 230 252 224 36 2 : tunables 0 0 0 : slabdata 7 7 0
kmalloc-part-13-8k 0 1 24576 1 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-13-4k 1 2 12288 2 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-13-2k 1 5 6144 5 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-13-1k 27 30 3072 10 8 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-13-512 188 189 1536 21 8 : tunables 0 0 0 : slabdata 9 9 0
kmalloc-part-13-256 7 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-13-128 35 42 384 21 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-13-64 437 448 256 32 2 : tunables 0 0 0 : slabdata 14 14 0
kmalloc-part-13-32 24 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-13-16 78 128 128 32 1 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-13-8 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-13-192 24 42 384 21 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-13-96 8 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-12-8k 2 2 24576 1 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-12-4k 0 0 12288 2 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-12-2k 28 30 6144 5 8 : tunables 0 0 0 : slabdata 6 6 0
kmalloc-part-12-1k 18 20 3072 10 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-12-512 45 63 1536 21 8 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-12-256 439 609 768 21 4 : tunables 0 0 0 : slabdata 29 29 0
kmalloc-part-12-128 7 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-12-64 228 256 256 32 2 : tunables 0 0 0 : slabdata 8 8 0
kmalloc-part-12-32 78 100 160 25 1 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-12-16 5 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-12-8 4 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-12-192 394 567 384 21 2 : tunables 0 0 0 : slabdata 27 27 0
kmalloc-part-12-96 44 72 224 36 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-11-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-11-4k 0 0 12288 2 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-11-2k 2 5 6144 5 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-11-1k 51 60 3072 10 8 : tunables 0 0 0 : slabdata 6 6 0
kmalloc-part-11-512 143 147 1536 21 8 : tunables 0 0 0 : slabdata 7 7 0
kmalloc-part-11-256 0 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-11-128 2 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-11-64 109 128 256 32 2 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-11-32 18 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-11-16 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-11-8 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-11-192 10 42 384 21 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-11-96 370 432 224 36 2 : tunables 0 0 0 : slabdata 12 12 0
kmalloc-part-10-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-10-4k 13 14 12288 2 8 : tunables 0 0 0 : slabdata 7 7 0
kmalloc-part-10-2k 6 10 6144 5 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-10-1k 13 20 3072 10 8 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-10-512 82 84 1536 21 8 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-10-256 99 105 768 21 4 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-part-10-128 60 63 384 21 2 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-10-64 55 64 256 32 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-10-32 110 125 160 25 1 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-part-10-16 10 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-10-8 1 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-10-192 2 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-10-96 18 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-09-4k 10 10 12288 2 8 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-part-09-2k 5 5 6144 5 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-1k 4 10 3072 10 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-512 16 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-256 0 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-128 0 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-64 116 128 256 32 2 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-09-32 60 75 160 25 1 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-09-16 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-09-8 10 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-09-192 338 357 384 21 2 : tunables 0 0 0 : slabdata 17 17 0
kmalloc-part-09-96 80 108 224 36 2 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-08-8k 6 6 24576 1 8 : tunables 0 0 0 : slabdata 6 6 0
kmalloc-part-08-4k 7 10 12288 2 8 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-part-08-2k 110 115 6144 5 8 : tunables 0 0 0 : slabdata 23 23 0
kmalloc-part-08-1k 26 30 3072 10 8 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-08-512 13 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-08-256 424 441 768 21 4 : tunables 0 0 0 : slabdata 21 21 0
kmalloc-part-08-128 80 84 384 21 2 : tunables 0 0 0 : slabdata 4 4 0
kmalloc-part-08-64 206 224 256 32 2 : tunables 0 0 0 : slabdata 7 7 0
kmalloc-part-08-32 63 75 160 25 1 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-08-16 137 160 128 32 1 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-part-08-8 7 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-08-192 3 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-08-96 1817 1836 224 36 2 : tunables 0 0 0 : slabdata 51 51 0
kmalloc-part-07-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-07-4k 0 2 12288 2 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-07-2k 0 0 6144 5 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-07-1k 0 10 3072 10 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-07-512 0 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-07-256 0 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-07-128 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-07-64 68 96 256 32 2 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-part-07-32 9 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-07-16 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-07-8 14 72 112 36 1 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-07-192 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-07-96 2 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-06-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-4k 0 0 12288 2 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-2k 0 0 6144 5 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-1k 0 0 3072 10 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-512 0 0 1536 21 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-256 0 0 768 21 4 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-128 2 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-06-64 2 32 256 32 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-06-32 1 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-06-16 5 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-06-8 5 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-06-192 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-06-96 1 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-05-8k 1 1 24576 1 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-05-4k 1 2 12288 2 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-05-2k 1 5 6144 5 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-05-1k 0 0 3072 10 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-512 0 0 1536 21 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-256 8 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-05-128 1 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-05-64 0 0 256 32 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-32 0 0 160 25 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-16 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-8 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-192 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-05-96 3 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-04-4k 13 14 12288 2 8 : tunables 0 0 0 : slabdata 7 7 0
kmalloc-part-04-2k 3 5 6144 5 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-1k 3 10 3072 10 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-512 3 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-256 10 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-128 24 42 384 21 2 : tunables 0 0 0 : slabdata 2 2 0
kmalloc-part-04-64 0 32 256 32 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-32 13 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-16 0 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-8 2 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-192 0 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-04-96 0 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-03-4k 1 2 12288 2 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-2k 0 5 6144 5 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-1k 0 10 3072 10 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-512 0 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-256 0 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-128 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-03-64 9 32 256 32 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-32 9 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-16 2 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-8 4 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-192 0 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-03-96 0 36 224 36 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-02-4k 1 2 12288 2 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-2k 0 0 6144 5 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-02-1k 1 10 3072 10 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-512 2 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-256 1 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-128 6 21 384 21 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-64 0 0 256 32 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-02-32 0 0 160 25 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-02-16 2 32 128 32 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-02-8 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-02-192 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-02-96 0 0 224 36 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-8k 0 0 24576 1 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-4k 0 0 12288 2 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-2k 0 0 6144 5 8 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-1k 2 10 3072 10 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-01-512 0 21 1536 21 8 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-01-256 0 0 768 21 4 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-128 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-64 27 32 256 32 2 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-01-32 5 25 160 25 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-01-16 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-8 1 36 112 36 1 : tunables 0 0 0 : slabdata 1 1 0
kmalloc-part-01-192 0 0 384 21 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-part-01-96 0 0 224 36 2 : tunables 0 0 0 : slabdata 0 0 0
kmalloc-8k 4 8 24576 1 8 : tunables 0 0 0 : slabdata 8 8 0
kmalloc-4k 25 28 12288 2 8 : tunables 0 0 0 : slabdata 14 14 0
kmalloc-2k 94 100 6144 5 8 : tunables 0 0 0 : slabdata 20 20 0
kmalloc-1k 138 140 3072 10 8 : tunables 0 0 0 : slabdata 14 14 0
kmalloc-512 146 168 1536 21 8 : tunables 0 0 0 : slabdata 8 8 0
kmalloc-256 37 63 768 21 4 : tunables 0 0 0 : slabdata 3 3 0
kmalloc-128 91 105 384 21 2 : tunables 0 0 0 : slabdata 5 5 0
kmalloc-64 660 800 256 32 2 : tunables 0 0 0 : slabdata 25 25 0
kmalloc-32 933 950 160 25 1 : tunables 0 0 0 : slabdata 38 38 0
kmalloc-16 1806 1824 128 32 1 : tunables 0 0 0 : slabdata 57 57 0
kmalloc-8 1712 1764 112 36 1 : tunables 0 0 0 : slabdata 49 49 0
kmalloc-192 140 189 384 21 2 : tunables 0 0 0 : slabdata 9 9 0
kmalloc-96 122 180 224 36 2 : tunables 0 0 0 : slabdata 5 5 0
kmem_cache_node 465 480 256 32 2 : tunables 0 0 0 : slabdata 15 15 0
kmem_cache 464 483 384 21 2 : tunables 0 0 0 : slabdata 23 23 0
You can see that the caches >=08 (pointer-containing objects) and cache 0/NORMAL (bag of bytes / no type inferred) contain the majority of objects.