]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfrm: refactor XFRMA_MTIMER_THRESH validation into a helper
authorAntony Antony <antony.antony@secunet.com>
Tue, 26 May 2026 19:08:58 +0000 (21:08 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Thu, 4 Jun 2026 10:22:43 +0000 (12:22 +0200)
Extract verify_mtimer_thresh() to consolidate the XFRMA_MTIMER_THRESH
validation logic shared between the add_sa and upcoming patch.

Signed-off-by: Antony Antony <antony.antony@secunet.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_user.c

index ce65e872cbacad9a77bb686885125ef70c6c484a..62eccdbe245fd9535e7a2a6202139e3963177a22 100644 (file)
@@ -248,6 +248,22 @@ static inline int verify_replay(struct xfrm_usersa_info *p,
        return 0;
 }
 
+static int verify_mtimer_thresh(bool has_encap, u8 dir,
+                               struct netlink_ext_ack *extack)
+{
+       if (!has_encap) {
+               NL_SET_ERR_MSG(extack,
+                              "MTIMER_THRESH requires encapsulation");
+               return -EINVAL;
+       }
+       if (dir == XFRM_SA_DIR_OUT) {
+               NL_SET_ERR_MSG(extack,
+                              "MTIMER_THRESH should not be set on output SA");
+               return -EINVAL;
+       }
+       return 0;
+}
+
 static int verify_newsa_info(struct xfrm_usersa_info *p,
                             struct nlattr **attrs,
                             struct netlink_ext_ack *extack)
@@ -455,18 +471,9 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,
        err = 0;
 
        if (attrs[XFRMA_MTIMER_THRESH]) {
-               if (!attrs[XFRMA_ENCAP]) {
-                       NL_SET_ERR_MSG(extack, "MTIMER_THRESH attribute can only be set on ENCAP states");
-                       err = -EINVAL;
-                       goto out;
-               }
-
-               if (sa_dir == XFRM_SA_DIR_OUT) {
-                       NL_SET_ERR_MSG(extack,
-                                      "MTIMER_THRESH attribute should not be set on output SA");
-                       err = -EINVAL;
+               err = verify_mtimer_thresh(!!attrs[XFRMA_ENCAP], sa_dir, extack);
+               if (err)
                        goto out;
-               }
        }
 
        if (sa_dir == XFRM_SA_DIR_OUT) {