]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bpf-restrict-fsaccess: move STAT_DEV_TO_KERNEL into generic code
authorLennart Poettering <lennart@amutable.com>
Tue, 2 Jun 2026 16:51:13 +0000 (18:51 +0200)
committerLennart Poettering <lennart@amutable.com>
Tue, 23 Jun 2026 20:55:23 +0000 (22:55 +0200)
We want to reuse it when processing sock-diag messages, hence let's
generalize this.

src/basic/devnum-util.h
src/core/bpf-restrict-fsaccess.c
src/core/bpf-restrict-fsaccess.h
src/test/test-bpf-restrict-fsaccess.c

index 8588b434fba795e00c4ee6ba7402d1858381991e..b5ae0dee575213371c29d65a34bd96c245ae549d 100644 (file)
@@ -56,3 +56,9 @@ static inline bool devnum_is_zero(dev_t d) {
 
 #define DEVNUM_TO_PTR(u) ((void*) (uintptr_t) (u))
 #define PTR_TO_DEVNUM(p) ((dev_t) ((uintptr_t) (p)))
+
+/* Convert a userspace dev_t (as returned by stat()) to the kernel's internal dev_t encoding. stat() returns
+ * new_encode_dev(s_dev), while various kernel interfaces (e.g. the BPF sb helpers, or unix_diag's
+ * udiag_vfs_dev) report s_dev directly, which uses MKDEV(major, minor) = (major << 20) | minor. */
+#define STAT_DEV_TO_KERNEL(dev) \
+        ((uint32_t) major(dev) << 20 | (uint32_t) minor(dev))
index 4e0af5596af29a40e855e6ebf9c0d9b3c673e214..daa64e6afd37b47126e6c0cb238ca5b30774fe6c 100644 (file)
@@ -5,6 +5,7 @@
 #include <sys/stat.h>
 
 #include "bpf-restrict-fsaccess.h"
+#include "devnum-util.h"
 #include "fd-util.h"
 #include "fileio.h"
 #include "initrd-util.h"
index a39f602539af3737c1bacc9b16fb809e0f90d56f..39b79353bead5e303078dc3422f896b3cb7cfb00 100644 (file)
@@ -1,8 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
-#include <sys/sysmacros.h>
-
 #include "core-forward.h"
 #include "macro.h"
 #include "shared-forward.h"
@@ -33,12 +31,6 @@ enum {
 /* Maximum number of dm-verity devices tracked in the BPF hash map. */
 #define DMVERITY_DEVICES_MAX (16U*1024U)
 
-/* Convert userspace dev_t (from stat()) to kernel dev_t encoding (MKDEV).
- * stat() returns new_encode_dev(s_dev); the BPF program reads s_dev directly
- * which uses MKDEV(major, minor) = (major << 20) | minor. */
-#define STAT_DEV_TO_KERNEL(dev) \
-        ((uint32_t)major(dev) << 20 | (uint32_t)minor(dev))
-
 /* Mirrors the BPF program's .bss section layout for read-modify-write via
  * bpf_map_lookup_elem/bpf_map_update_elem on the serialized .bss map FD. */
 struct restrict_fsaccess_bss {
index 80d448815cf0035ea9aa7a42ca8da683f23306c8..776d75eaec8c06472a66dcd8e4815babe18cf8b2 100644 (file)
@@ -25,6 +25,7 @@
 #include <unistd.h>
 
 #include "bpf-restrict-fsaccess.h"
+#include "devnum-util.h"
 #include "fd-util.h"
 #include "log.h"
 #include "string-util.h"