LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

Re: Race over table->data in proc_do_sync_threshold()

To: Sishuai Gong <sishuai.system@xxxxxxxxx>
Subject: Re: Race over table->data in proc_do_sync_threshold()
Cc: horms@xxxxxxxxxxxx, Linux Kernel Network Developers <netdev@xxxxxxxxxxxxxxx>, lvs-devel@xxxxxxxxxxxxxxx
From: Julian Anastasov <ja@xxxxxx>
Date: Thu, 10 Aug 2023 09:20:28 +0300 (EEST)
        Hello,

On Wed, 9 Aug 2023, Sishuai Gong wrote:

> Hi,
> 
> We observed races over (struct ctl_table *) table->data when two threads
> are running proc_do_sync_threshold() in parallel, as shown below:
> 
> Thread-1                      Thread-2
> memcpy(val, valp, sizeof(val)); memcpy(valp, val, sizeof(val));
> 
> This race probably would mess up table->data. Is it better to add a lock?

        We can put mutex_lock(&ipvs->sync_mutex) before the first
memcpy and to use two WRITE_ONCE instead of the second memcpy. But
this requires extra2 = ipvs in ip_vs_control_net_init_sysctl():

        tbl[idx].data = &ipvs->sysctl_sync_threshold;
+       tbl[idx].extra2 = ipvs;

        Will you provide patch?

Regards

--
Julian Anastasov <ja@xxxxxx>


<Prev in Thread] Current Thread [Next in Thread>