On (20/06/23 13:07), Alan Maguire wrote: > struct sk_buff *skb = alloc_skb(64, GFP_KERNEL); > > pr_info("%pT", BTF_PTR_TYPE(skb, "struct sk_buff")); > > ...gives us: > > (struct sk_buff){ > .transport_header = (__u16)65535, > .mac_header = (__u16)65535, > .end = (sk_buff_data_t)192, > .head = (unsigned char *)000000007524fd8b, > .data = (unsigned char *)000000007524fd8b, > .truesize = (unsigned int)768, > .users = (refcount_t){ > .refs = (atomic_t){ > .counter = (int)1, > }, > }, > } Hmm. So this can expose the kernel memory layout (IOW do you print out real %px pointers and so on)? If so, then I'd suggest not to use printk. Unprivileged /dev/kmsg or /proc/kmsg reads are really OK thing for printk() log buffer. And if you are going to print pointer hashes instead, .transport_header = (__u16)65535, .mac_header = (__u16)65535, .end = (sk_buff_data_t)192, .head = (unsigned char *)34897918740, // pointer_hash .data = (unsigned char *)23942384983, // pointer hash .truesize = (unsigned int)768, .users = (refcount_t){ .refs = (atomic_t){ .counter = (int)1, }, }, then the value of such printouts becomes a bit unclear to me, sorry. Probably, something like a seq print into a file somewhere in /sys/kernel/debug/foo, from which only privileged processes can read, would be a better approach? My 5 cents. -ss