"Replay seq and seq_hi should be 0 for output SA");
                        return -EINVAL;
                }
-               if (rs->oseq_hi && !(p->flags & XFRM_STATE_ESN)) {
-                       NL_SET_ERR_MSG(
-                               extack,
-                               "Replay oseq_hi should be 0 in non-ESN mode for output SA");
-                       return -EINVAL;
+
+               if (!(p->flags & XFRM_STATE_ESN)) {
+                       if (rs->oseq_hi) {
+                               NL_SET_ERR_MSG(
+                                       extack,
+                                       "Replay oseq_hi should be 0 in non-ESN mode for output SA");
+                               return -EINVAL;
+                       }
+                       if (rs->oseq == U32_MAX) {
+                               NL_SET_ERR_MSG(
+                                       extack,
+                                       "Replay oseq should be less than 0xFFFFFFFF in non-ESN mode for output SA");
+                               return -EINVAL;
+                       }
+               } else {
+                       if (rs->oseq == U32_MAX && rs->oseq_hi == U32_MAX) {
+                               NL_SET_ERR_MSG(
+                                       extack,
+                                       "Replay oseq and oseq_hi should be less than 0xFFFFFFFF for output SA");
+                               return -EINVAL;
+                       }
                }
                if (rs->bmp_len) {
                        NL_SET_ERR_MSG(extack, "Replay bmp_len should 0 for output SA");
                                       "Replay oseq and oseq_hi should be 0 for input SA");
                        return -EINVAL;
                }
-               if (rs->seq_hi && !(p->flags & XFRM_STATE_ESN)) {
-                       NL_SET_ERR_MSG(
-                               extack,
-                               "Replay seq_hi should be 0 in non-ESN mode for input SA");
-                       return -EINVAL;
+               if (!(p->flags & XFRM_STATE_ESN)) {
+                       if (rs->seq_hi) {
+                               NL_SET_ERR_MSG(
+                                       extack,
+                                       "Replay seq_hi should be 0 in non-ESN mode for input SA");
+                               return -EINVAL;
+                       }
+
+                       if (rs->seq == U32_MAX) {
+                               NL_SET_ERR_MSG(
+                                       extack,
+                                       "Replay seq should be less than 0xFFFFFFFF in non-ESN mode for input SA");
+                               return -EINVAL;
+                       }
+               } else {
+                       if (rs->seq == U32_MAX && rs->seq_hi == U32_MAX) {
+                               NL_SET_ERR_MSG(
+                                       extack,
+                                       "Replay seq and seq_hi should be less than 0xFFFFFFFF for input SA");
+                               return -EINVAL;
+                       }
                }
        }