Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp1328790ybm; Sat, 30 May 2020 05:48:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAGwTDjJzLJtEmU1kQ+oBPNL4h0o8P8uU67WTsAA7wNbfdqvw3PLTELDueKUeeKzf+Nvjp X-Received: by 2002:a05:6402:1d2d:: with SMTP id dh13mr12461497edb.169.1590842887507; Sat, 30 May 2020 05:48:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590842887; cv=none; d=google.com; s=arc-20160816; b=r42cKxXVsPVH6PQQW/Z73q6w7F6Wf8YzNYkUBX2eZs5KF8Welb5GIFUuMCWMR1/s8x P/B7j9/DT4RXpFqGPbGwm66wXJVAVtGYWSzi9L+dj5TVDGUBK4jU2HkDRbyBfIHLKDBo vViHizUzADvZwCApa6NdVsW+vjdaDKnaROKfh/RnOkYfyD6dm340OcAJLdZg5ZFXY7p0 jxepx3LHFfh8Med4CGKqbmFW2hmoxHF4PhWysOiUe1333I5e5zxwlY26ReFXbceyigjT YM7L+RIrhkBy8fu+GbbEAsx7Oab0DEgysMC0/Y2V5Tw47DhTo9CplGMuRsjoanURjSUk P7Ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=+cmoAgN64utf1iVzaq1leTggaBShX1Ug7Yc1zpv/o2M=; b=ae2PsuyRpJ1NtC8BIzCe1ErTvP9glzG8+9m3WxwrsC3nryiKC+I120SG/VArTHeyQV P3JDRccjDkPt0K7jwMLjr9ierXICP01nDj6iG9Pz5g9Szyk1yRiL3mZ3VXYgbDUjHLEt gZShRuMUF4wZNz6bv7IqPRqnMjrKqk4IlB4A6JEUeXq2xMQNyqI9j7Wra7i6dxXZHocC Zk8kRR9bfJhn8+9I6W0Ob9ro9HTIRnwnHGMeaYcPO0E0cg0FJ7CVHOcM0zY12RFaxM6Z HU+PwObJHDGIoNlvDtxX9PW/D69fgN6SSyLsTDrt2YzntE7pMsXanQpcL3/KSTrHn2H/ kkMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@excello.cz header.s=default header.b=kTp6lb94; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=excello.cz Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dx23si7241705ejb.474.2020.05.30.05.47.43; Sat, 30 May 2020 05:48:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@excello.cz header.s=default header.b=kTp6lb94; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=excello.cz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728844AbgE3Mp7 (ORCPT + 99 others); Sat, 30 May 2020 08:45:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726860AbgE3Mp7 (ORCPT ); Sat, 30 May 2020 08:45:59 -0400 X-Greylist: delayed 397 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Sat, 30 May 2020 05:45:58 PDT Received: from out2.virusfree.cz (out2.virusfree.cz [IPv6:2001:67c:1591::e2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BDB79C03E969 for ; Sat, 30 May 2020 05:45:58 -0700 (PDT) Received: (qmail 32270 invoked from network); 30 May 2020 14:39:16 +0200 Received: from out2.virusfree.cz by out2.virusfree.cz (VF-Scanner: Clear:RC:0(2001:67c:1591::6):SC:0(-1.9/5.0):CC:0:; processed in 1.4 s); 30 May 2020 12:39:16 +0000 X-VF-Scanner-Mail-From: pv@excello.cz X-VF-Scanner-Rcpt-To: linux-kernel@vger.kernel.org X-VF-Scanner-ID: 20200530123915.393418.32250.out2.virusfree.cz.0 X-Spam-Status: No, hits=-1.9, required=5.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=excello.cz; h= date:message-id:from:to:subject:reply-to; q=dns/txt; s=default; t=1590842355; bh=+cmoAgN64utf1iVzaq1leTggaBShX1Ug7Yc1zpv/o2M=; b= kTp6lb94U5wWlyFroBSaEd36Pn6ESUo4OOnsMT8LL0eHxyGpwxEDGLk4kStEOwOv gQAOiIglYH3WrnRTiI1X7fGNwTG1JDG64DP62JUb6ncB/9Kl4pb+hxjqHgVVB1ue 3qhgErcOVt81/+q7sdPdvXJpjjJ9xU60tDP7Bhhkw24= Received: from posta.excello.cz (2001:67c:1591::6) by out2.virusfree.cz with ESMTPS (TLSv1.3, TLS_AES_256_GCM_SHA384); 30 May 2020 14:39:15 +0200 Received: from arkam (ip-86-49-32-164.net.upcbroadband.cz [86.49.32.164]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by posta.excello.cz (Postfix) with ESMTPSA id 9266C9D7484; Sat, 30 May 2020 14:39:14 +0200 (CEST) Date: Sat, 30 May 2020 14:39:12 +0200 From: Petr =?utf-8?B?VmFuxJtr?= To: Steffen Klassert , Herbert Xu , "David S. Miller" , Jakub Kicinski , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Petr =?utf-8?B?VmFuxJtr?= Subject: [PATCH net-next v2] xfrm: introduce oseq-may-wrap flag Message-ID: <20200530123912.GA7476@arkam> References: <20200525154633.GB22403@atlantis> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200525154633.GB22403@atlantis> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RFC 4303 in section 3.3.3 suggests to disable anti-replay for manually distributed ICVs in which case the sender does not need to monitor or reset the counter. However, the sender still increments the counter and when it reaches the maximum value, the counter rolls over back to zero. This patch introduces new extra_flag XFRM_SA_XFLAG_OSEQ_MAY_WRAP which allows sequence number to cycle in outbound packets if set. This flag is used only in legacy and bmp code, because esn should not be negotiated if anti-replay is disabled (see note in 3.3.3 section). Signed-off-by: Petr Vaněk --- include/uapi/linux/xfrm.h | 1 + net/xfrm/xfrm_replay.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/uapi/linux/xfrm.h b/include/uapi/linux/xfrm.h index 5f3b9fec7b5f..b701244334b5 100644 --- a/include/uapi/linux/xfrm.h +++ b/include/uapi/linux/xfrm.h @@ -387,6 +387,7 @@ struct xfrm_usersa_info { }; #define XFRM_SA_XFLAG_DONT_ENCAP_DSCP 1 +#define XFRM_SA_XFLAG_OSEQ_MAY_WRAP 2 struct xfrm_usersa_id { xfrm_address_t daddr; diff --git a/net/xfrm/xfrm_replay.c b/net/xfrm/xfrm_replay.c index 98943f8d01aa..c6a4338a0d08 100644 --- a/net/xfrm/xfrm_replay.c +++ b/net/xfrm/xfrm_replay.c @@ -89,7 +89,8 @@ static int xfrm_replay_overflow(struct xfrm_state *x, struct sk_buff *skb) if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { XFRM_SKB_CB(skb)->seq.output.low = ++x->replay.oseq; XFRM_SKB_CB(skb)->seq.output.hi = 0; - if (unlikely(x->replay.oseq == 0)) { + if (unlikely(x->replay.oseq == 0) && + !(x->props.extra_flags & XFRM_SA_XFLAG_OSEQ_MAY_WRAP)) { x->replay.oseq--; xfrm_audit_state_replay_overflow(x, skb); err = -EOVERFLOW; @@ -168,7 +169,8 @@ static int xfrm_replay_overflow_bmp(struct xfrm_state *x, struct sk_buff *skb) if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { XFRM_SKB_CB(skb)->seq.output.low = ++replay_esn->oseq; XFRM_SKB_CB(skb)->seq.output.hi = 0; - if (unlikely(replay_esn->oseq == 0)) { + if (unlikely(replay_esn->oseq == 0) && + !(x->props.extra_flags & XFRM_SA_XFLAG_OSEQ_MAY_WRAP)) { replay_esn->oseq--; xfrm_audit_state_replay_overflow(x, skb); err = -EOVERFLOW; @@ -572,7 +574,8 @@ static int xfrm_replay_overflow_offload(struct xfrm_state *x, struct sk_buff *sk XFRM_SKB_CB(skb)->seq.output.hi = 0; xo->seq.hi = 0; - if (unlikely(oseq < x->replay.oseq)) { + if (unlikely(oseq < x->replay.oseq) && + !(x->props.extra_flags & XFRM_SA_XFLAG_OSEQ_MAY_WRAP)) { xfrm_audit_state_replay_overflow(x, skb); err = -EOVERFLOW; @@ -611,7 +614,8 @@ static int xfrm_replay_overflow_offload_bmp(struct xfrm_state *x, struct sk_buff XFRM_SKB_CB(skb)->seq.output.hi = 0; xo->seq.hi = 0; - if (unlikely(oseq < replay_esn->oseq)) { + if (unlikely(oseq < replay_esn->oseq) && + !(x->props.extra_flags & XFRM_SA_XFLAG_OSEQ_MAY_WRAP)) { xfrm_audit_state_replay_overflow(x, skb); err = -EOVERFLOW; -- 2.26.2