--- zzzz-none-000/linux-4.1.52/net/xfrm/xfrm_replay.c 2018-05-28 02:26:45.000000000 +0000 +++ bcm63-7530ax-731/linux-4.1.52/net/xfrm/xfrm_replay.c 2022-03-02 11:37:14.000000000 +0000 @@ -45,6 +45,9 @@ return seq_hi; } +#if defined(CONFIG_BCM_KF_SPU) && (defined(CONFIG_BCM_SPU) || defined(CONFIG_BCM_SPU_MODULE)) && defined(CONFIG_BLOG) +EXPORT_SYMBOL(xfrm_replay_seqhi); +#endif static void xfrm_replay_notify(struct xfrm_state *x, int event) { @@ -98,10 +101,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; @@ -142,6 +155,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; } @@ -177,10 +193,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; @@ -233,6 +259,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; } @@ -409,6 +438,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; @@ -424,6 +470,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); } @@ -486,6 +535,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; }