--- zzzz-none-000/linux-4.19.183/net/xfrm/xfrm_replay.c 2021-03-24 10:07:39.000000000 +0000 +++ bcm63-7530ax-756/linux-4.19.183/net/xfrm/xfrm_replay.c 2023-06-28 08:54:21.000000000 +0000 @@ -99,10 +99,20 @@ struct net *net = xs_net(x); if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb == NULL ) ++x->replay.oseq; + else { +#endif XFRM_SKB_CB(skb)->seq.output.low = ++x->replay.oseq; XFRM_SKB_CB(skb)->seq.output.hi = 0; +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + } +#endif if (unlikely(x->replay.oseq == 0)) { x->replay.oseq--; +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb != NULL ) +#endif xfrm_audit_state_replay_overflow(x, skb); err = -EOVERFLOW; @@ -143,6 +153,9 @@ return 0; err: +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb != NULL ) +#endif xfrm_audit_state_replay(x, skb, net_seq); return -EINVAL; } @@ -178,10 +191,20 @@ struct net *net = xs_net(x); if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb == NULL ) ++replay_esn->oseq; + else { +#endif XFRM_SKB_CB(skb)->seq.output.low = ++replay_esn->oseq; XFRM_SKB_CB(skb)->seq.output.hi = 0; +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + } +#endif if (unlikely(replay_esn->oseq == 0)) { replay_esn->oseq--; +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb != NULL ) +#endif xfrm_audit_state_replay_overflow(x, skb); err = -EOVERFLOW; @@ -234,6 +257,9 @@ err_replay: x->stats.replay++; err: +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb != NULL ) +#endif xfrm_audit_state_replay(x, skb, net_seq); return -EINVAL; } @@ -410,6 +436,23 @@ struct net *net = xs_net(x); if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb == NULL ) + { + ++replay_esn->oseq; + if (unlikely(replay_esn->oseq == 0)) { + ++replay_esn->oseq_hi; + if (replay_esn->oseq_hi == 0) { + replay_esn->oseq--; + replay_esn->oseq_hi--; + err = -EOVERFLOW; + return err; + } + } + } + else + { +#endif XFRM_SKB_CB(skb)->seq.output.low = ++replay_esn->oseq; XFRM_SKB_CB(skb)->seq.output.hi = replay_esn->oseq_hi; @@ -425,6 +468,9 @@ return err; } } +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + } +#endif if (xfrm_aevent_is_on(net)) x->repl->notify(x, XFRM_REPLAY_UPDATE); } @@ -487,6 +533,9 @@ err_replay: x->stats.replay++; err: +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) + if ( skb != NULL ) +#endif xfrm_audit_state_replay(x, skb, net_seq); return -EINVAL; }