]> Gentwo Git Trees - linux/.git/commitdiff
selinux: Move avtab_hash() to a shared location for future reuse
authorHongru Zhang <zhanghongru@xiaomi.com>
Thu, 23 Oct 2025 11:29:54 +0000 (19:29 +0800)
committerPaul Moore <paul@paul-moore.com>
Thu, 23 Oct 2025 22:24:30 +0000 (18:24 -0400)
This is a preparation patch, no functional change.

Signed-off-by: Hongru Zhang <zhanghongru@xiaomi.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
security/selinux/include/hash.h [new file with mode: 0644]
security/selinux/ss/avtab.c

diff --git a/security/selinux/include/hash.h b/security/selinux/include/hash.h
new file mode 100644 (file)
index 0000000..5b429a8
--- /dev/null
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _SELINUX_HASH_H_
+#define _SELINUX_HASH_H_
+
+/* Based on MurmurHash3, written by Austin Appleby and placed in the
+ * public domain.
+ */
+static inline u32 avtab_hash(const struct avtab_key *keyp, u32 mask)
+{
+       static const u32 c1 = 0xcc9e2d51;
+       static const u32 c2 = 0x1b873593;
+       static const u32 r1 = 15;
+       static const u32 r2 = 13;
+       static const u32 m = 5;
+       static const u32 n = 0xe6546b64;
+
+       u32 hash = 0;
+
+#define mix(input)                                         \
+       do {                                               \
+               u32 v = input;                             \
+               v *= c1;                                   \
+               v = (v << r1) | (v >> (32 - r1));          \
+               v *= c2;                                   \
+               hash ^= v;                                 \
+               hash = (hash << r2) | (hash >> (32 - r2)); \
+               hash = hash * m + n;                       \
+       } while (0)
+
+       mix(keyp->target_class);
+       mix(keyp->target_type);
+       mix(keyp->source_type);
+
+#undef mix
+
+       hash ^= hash >> 16;
+       hash *= 0x85ebca6b;
+       hash ^= hash >> 13;
+       hash *= 0xc2b2ae35;
+       hash ^= hash >> 16;
+
+       return hash & mask;
+}
+
+#endif /* _SELINUX_HASH_H_ */
index c2c31521cace1a04cea5d41eaff3fa26e083b2c7..15e89d9b5d721aff6f58aebf20193cbc6940f825 100644 (file)
 #include <linux/errno.h>
 #include "avtab.h"
 #include "policydb.h"
+#include "hash.h"
 
 static struct kmem_cache *avtab_node_cachep __ro_after_init;
 static struct kmem_cache *avtab_xperms_cachep __ro_after_init;
 
-/* Based on MurmurHash3, written by Austin Appleby and placed in the
- * public domain.
- */
-static inline u32 avtab_hash(const struct avtab_key *keyp, u32 mask)
-{
-       static const u32 c1 = 0xcc9e2d51;
-       static const u32 c2 = 0x1b873593;
-       static const u32 r1 = 15;
-       static const u32 r2 = 13;
-       static const u32 m = 5;
-       static const u32 n = 0xe6546b64;
-
-       u32 hash = 0;
-
-#define mix(input)                                         \
-       do {                                               \
-               u32 v = input;                             \
-               v *= c1;                                   \
-               v = (v << r1) | (v >> (32 - r1));          \
-               v *= c2;                                   \
-               hash ^= v;                                 \
-               hash = (hash << r2) | (hash >> (32 - r2)); \
-               hash = hash * m + n;                       \
-       } while (0)
-
-       mix(keyp->target_class);
-       mix(keyp->target_type);
-       mix(keyp->source_type);
-
-#undef mix
-
-       hash ^= hash >> 16;
-       hash *= 0x85ebca6b;
-       hash ^= hash >> 13;
-       hash *= 0xc2b2ae35;
-       hash ^= hash >> 16;
-
-       return hash & mask;
-}
-
 static struct avtab_node *avtab_insert_node(struct avtab *h,
                                            struct avtab_node **dst,
                                            const struct avtab_key *key,