diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c index 25b7ebda2fab..2d049244be81 100644 --- a/net/ipv6/xfrm6_tunnel.c +++ b/net/ipv6/xfrm6_tunnel.c @@ -121,8 +121,9 @@ static u32 __xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr) struct xfrm6_tunnel_spi *x6spi; int index; - if (xfrm6_tn->spi < XFRM6_TUNNEL_SPI_MIN || - xfrm6_tn->spi >= XFRM6_TUNNEL_SPI_MAX) + if ((xfrm6_tn->spi < XFRM6_TUNNEL_SPI_MIN || + xfrm6_tn->spi >= XFRM6_TUNNEL_SPI_MAX) && + xfrm6_tn->spi_byspi) xfrm6_tn->spi = XFRM6_TUNNEL_SPI_MIN; else xfrm6_tn->spi++;