]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ipvs: properly dereference pe in ip_vs_add_service
authorChen Hanxiao <chenhx.fnst@fujitsu.com>
Thu, 27 Jun 2024 06:15:15 +0000 (14:15 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 May 2025 05:41:07 +0000 (07:41 +0200)
commit cbd070a4ae62f119058973f6d2c984e325bce6e7 upstream.

Use pe directly to resolve sparse warning:

  net/netfilter/ipvs/ip_vs_ctl.c:1471:27: warning: dereference of noderef expression

Fixes: 39b972231536 ("ipvs: handle connections started by real-servers")
Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Acked-by: Simon Horman <horms@kernel.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Cliff Liu <donghua.liu@windriver.com>
Signed-off-by: He Zhe <Zhe.He@windriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/netfilter/ipvs/ip_vs_ctl.c

index fb9f1badeddbfdb2f568e6b23dcc0ea0a9bb0c39..4c9ef2ae4d6877bcb1b63b70c1688093691442d0 100644 (file)
@@ -1384,20 +1384,20 @@ ip_vs_add_service(struct netns_ipvs *ipvs, struct ip_vs_service_user_kern *u,
                sched = NULL;
        }
 
-       /* Bind the ct retriever */
-       RCU_INIT_POINTER(svc->pe, pe);
-       pe = NULL;
-
        /* Update the virtual service counters */
        if (svc->port == FTPPORT)
                atomic_inc(&ipvs->ftpsvc_counter);
        else if (svc->port == 0)
                atomic_inc(&ipvs->nullsvc_counter);
-       if (svc->pe && svc->pe->conn_out)
+       if (pe && pe->conn_out)
                atomic_inc(&ipvs->conn_out_counter);
 
        ip_vs_start_estimator(ipvs, &svc->stats);
 
+       /* Bind the ct retriever */
+       RCU_INIT_POINTER(svc->pe, pe);
+       pe = NULL;
+
        /* Count only IPv4 services for old get/setsockopt interface */
        if (svc->af == AF_INET)
                ipvs->num_services++;