Hello, On Mon, 21 Aug 2023, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 4.19-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. > > To reproduce the conflict and resubmit, you may use the following commands: > > git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-4.19.y > git checkout FETCH_HEAD > git cherry-pick -x 5310760af1d4fbea1452bfc77db5f9a680f7ae47 > # <resolve conflicts, build, test, etc.> > git commit -s > git send-email --to '<stable@xxxxxxxxxxxxxxx>' --in-reply-to '2023082114-remix-cable-0852@gregkh' --subject-prefix 'PATCH 4.19.y' HEAD^.. > > Possible dependencies: > > 5310760af1d4 ("ipvs: fix racy memcpy in proc_do_sync_threshold") > 1b90af292e71 ("ipvs: Improve robustness to the ipvs sysctl") It can happen only if we backport the other mentioned commit 1b90af292e71 which needs changing SYSCTL_ZERO/SYSCTL_ONE to zero/one and then 5310760af1d4 will apply as-is to both 4.14 and 4.19. Should I send backport for 1b90af292e71, it is even more useful as a fix than 5310760af1d4? > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > >From 5310760af1d4fbea1452bfc77db5f9a680f7ae47 Mon Sep 17 00:00:00 2001 > From: Sishuai Gong <sishuai.system@xxxxxxxxx> > Date: Thu, 10 Aug 2023 15:12:42 -0400 > Subject: [PATCH] ipvs: fix racy memcpy in proc_do_sync_threshold > > When two threads run proc_do_sync_threshold() in parallel, > data races could happen between the two memcpy(): > > Thread-1 Thread-2 > memcpy(val, valp, sizeof(val)); > memcpy(valp, val, sizeof(val)); > > This race might mess up the (struct ctl_table *) table->data, > so we add a mutex lock to serialize them. > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") > Link: https://lore.kernel.org/netdev/B6988E90-0A1E-4B85-BF26-2DAF6D482433@xxxxxxxxx/ > Signed-off-by: Sishuai Gong <sishuai.system@xxxxxxxxx> > Acked-by: Simon Horman <horms@xxxxxxxxxx> > Acked-by: Julian Anastasov <ja@xxxxxx> > Signed-off-by: Florian Westphal <fw@xxxxxxxxx> > > diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c > index 62606fb44d02..4bb0d90eca1c 100644 > --- a/net/netfilter/ipvs/ip_vs_ctl.c > +++ b/net/netfilter/ipvs/ip_vs_ctl.c > @@ -1876,6 +1876,7 @@ static int > proc_do_sync_threshold(struct ctl_table *table, int write, > void *buffer, size_t *lenp, loff_t *ppos) > { > + struct netns_ipvs *ipvs = table->extra2; > int *valp = table->data; > int val[2]; > int rc; > @@ -1885,6 +1886,7 @@ proc_do_sync_threshold(struct ctl_table *table, int write, > .mode = table->mode, > }; > > + mutex_lock(&ipvs->sync_mutex); > memcpy(val, valp, sizeof(val)); > rc = proc_dointvec(&tmp, write, buffer, lenp, ppos); > if (write) { > @@ -1894,6 +1896,7 @@ proc_do_sync_threshold(struct ctl_table *table, int write, > else > memcpy(valp, val, sizeof(val)); > } > + mutex_unlock(&ipvs->sync_mutex); > return rc; > } > > @@ -4321,6 +4324,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs) > ipvs->sysctl_sync_threshold[0] = DEFAULT_SYNC_THRESHOLD; > ipvs->sysctl_sync_threshold[1] = DEFAULT_SYNC_PERIOD; > tbl[idx].data = &ipvs->sysctl_sync_threshold; > + tbl[idx].extra2 = ipvs; > tbl[idx++].maxlen = sizeof(ipvs->sysctl_sync_threshold); > ipvs->sysctl_sync_refresh_period = DEFAULT_SYNC_REFRESH_PERIOD; > tbl[idx++].data = &ipvs->sysctl_sync_refresh_period; Regards -- Julian Anastasov <ja@xxxxxx>