]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sysctl: Create macro for user-to-kernel uint converter
authorJoel Granados <joel.granados@kernel.org>
Thu, 16 Oct 2025 08:22:16 +0000 (10:22 +0200)
committerJoel Granados <joel.granados@kernel.org>
Thu, 27 Nov 2025 14:43:20 +0000 (15:43 +0100)
Replace sysctl_user_to_kern_uint_conv function with
SYSCTL_USER_TO_KERN_UINT_CONV macro that accepts u_ptr_op parameter for
value transformation. Replacing sysctl_kern_to_user_uint_conv is not
needed as it will only be used from within sysctl.c. This is a
preparation commit for creating a custom converter in fs/pipe.c. No
Functional changes are intended.

Signed-off-by: Joel Granados <joel.granados@kernel.org>
kernel/sysctl.c

index 1e8d330a773de5446d85ba6961d2c2199fc524ab..00595b84beacb61a46c4f427e48bcfa1dd986b16 100644 (file)
@@ -462,15 +462,19 @@ static SYSCTL_INT_CONV_CUSTOM(_ms_jiffies_minmax,
                              sysctl_user_to_kern_int_conv_ms,
                              sysctl_kern_to_user_int_conv_ms, true)
 
-static int sysctl_user_to_kern_uint_conv(const unsigned long *u_ptr,
-                                        unsigned int *k_ptr)
-{
-       if (*u_ptr > UINT_MAX)
-               return -EINVAL;
-       WRITE_ONCE(*k_ptr, *u_ptr);
-       return 0;
+#define SYSCTL_USER_TO_KERN_UINT_CONV(name, u_ptr_op)          \
+int sysctl_user_to_kern_uint_conv##name(const unsigned long *u_ptr,\
+                                       unsigned int *k_ptr)    \
+{                                                              \
+       unsigned long u = u_ptr_op(*u_ptr);                     \
+       if (u > UINT_MAX)                                       \
+               return -EINVAL;                                 \
+       WRITE_ONCE(*k_ptr, u);                                  \
+       return 0;                                               \
 }
 
+static SYSCTL_USER_TO_KERN_UINT_CONV(, SYSCTL_CONV_IDENTITY)
+
 static int sysctl_kern_to_user_uint_conv(unsigned long *u_ptr,
                                         const unsigned int *k_ptr)
 {