[PATCH bpf-next v2 2/6] tools: Copy KALLSYMS_QUERY definitions to linux/fs.h
From: Samuel Wu
Date: Thu Oct 22 2026 - 20:19:02 EST
Copy the KALLSYMS_QUERY ioctl definitions from include/uapi/linux/fs.h
to tools/include/uapi/linux/fs.h for libbpf and the proc and bpf
selftests. Only the new definitions are copied; other differences
between the two headers are left alone.
Signed-off-by: Samuel Wu <wusamuel@xxxxxxxxxx>
---
tools/include/uapi/linux/fs.h | 41 +++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/tools/include/uapi/linux/fs.h b/tools/include/uapi/linux/fs.h
index f0a26309b6d5..d224516e6d6e 100644
--- a/tools/include/uapi/linux/fs.h
+++ b/tools/include/uapi/linux/fs.h
@@ -567,4 +567,45 @@ struct procmap_query {
__u64 build_id_addr; /* in */
};
+/* /proc/kallsyms ioctl */
+#define KALLSYMS_QUERY _IOWR(PROCFS_IOCTL_MAGIC, 18, struct kallsyms_query)
+
+/* Exactly one query mode must be set in query_flags. */
+enum kallsyms_query_flags {
+ /*
+ * Look up a symbol in vmlinux or loaded modules (vmlinux first; BPF
+ * and ftrace symbols are not searched) by exact NUL-terminated name
+ * at sym_name_addr and return sym_addr. sym_addr and sym_name_size
+ * must be 0 on input.
+ */
+ KALLSYMS_QUERY_BY_SYMBOL = 0x01,
+ /*
+ * Look up the symbol covering sym_addr and write its NUL-terminated
+ * name to the sym_name_addr buffer of sym_name_size bytes. The same
+ * symbols as %pS are searched: vmlinux, loaded modules, BPF JIT
+ * images, and freed module init functions still tracked by ftrace.
+ * A buffer of KSYM_NAME_LEN (512 at the time of writing) bytes is
+ * always enough. On success, sym_name_size is set to the number of
+ * bytes written (including the terminating NUL).
+ */
+ KALLSYMS_QUERY_BY_ADDR = 0x02,
+};
+
+/*
+ * Returns -ENOENT if no symbol matches, -EADDRNOTAVAIL if the name maps to
+ * more than one address, -ENAMETOOLONG if the name does not fit in
+ * KSYM_NAME_LEN (512 at the time of writing) or sym_name_size bytes, and
+ * -EPERM if kallsyms addresses are hidden from the opener of /proc/kallsyms
+ * (e.g. kptr_restrict).
+ */
+struct kallsyms_query {
+ __u64 size; /* in - struct size for compatibility */
+ __u64 query_flags; /* in - query mode (enum kallsyms_query_flags) */
+ __u64 sym_name_addr; /* in - address of symbol name buffer */
+ __u64 sym_addr; /* out (BY_SYMBOL) / in (BY_ADDR) */
+ __u64 sym_name_size; /* in/out - name buffer size / bytes written */
+};
+
+#define KALLSYMS_QUERY_SIZE_VER0 40 /* sizeof first published struct */
+
#endif /* _UAPI_LINUX_FS_H */
--
2.56.0.257.gf7497c7d27-goog