* [PATCH 1/1] ipc/shm: serialize orphan cleanup with shm_nattch updates [not found] <cover.1777410234.git.zylzyl2333@gmail.com> @ 2026-04-30 5:21 ` Ren Wei 2026-04-30 15:37 ` Andrew Morton 0 siblings, 1 reply; 3+ messages in thread From: Ren Wei @ 2026-04-30 5:21 UTC (permalink / raw) To: linux-kernel Cc: akpm, ljs, Liam.Howlett, brauner, kees, aha310510, sergeh, segoon, yuantan098, yifanwucs, tomapufckgml, bird, zylzyl2333, n05ec From: Yilin Zhu <zylzyl2333@gmail.com> shm_destroy_orphaned() walks the shm idr under shm_ids(ns).rwsem, but that does not serialize all fields tested by shm_may_destroy(). In particular, shm_nattch is updated while holding shm_perm.lock, and attach paths can do that without holding the rwsem. Do not decide that an orphaned segment is unused before taking the object lock. Move the shm_may_destroy() check under shm_perm.lock, matching the other destroy paths, and unlock the segment when it no longer qualifies for removal. Fixes: 4c677e2eefdb ("shm: optimize locking and ipc_namespace getting") Cc: stable@kernel.org Reported-by: Yuan Tan <yuantan098@gmail.com> Reported-by: Yifan Wu <yifanwucs@gmail.com> Reported-by: Juefei Pu <tomapufckgml@gmail.com> Reported-by: Xin Liu <bird@lzu.edu.cn> Signed-off-by: Yilin Zhu <zylzyl2333@gmail.com> Signed-off-by: Ren Wei <n05ec@lzu.edu.cn> --- ipc/shm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ipc/shm.c b/ipc/shm.c index a95dae447707..b3e8a58e177d 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -418,15 +418,17 @@ static int shm_try_destroy_orphaned(int id, void *p, void *data) * We want to destroy segments without users and with already * exit'ed originating process. * - * As shp->* are changed under rwsem, it's safe to skip shp locking. + * shm_nattch can be changed under shm_perm.lock without holding the + * rwsem, so take the object lock before checking shm_may_destroy(). */ if (!list_empty(&shp->shm_clist)) return 0; - if (shm_may_destroy(shp)) { - shm_lock_by_ptr(shp); + shm_lock_by_ptr(shp); + if (shm_may_destroy(shp)) shm_destroy(ns, shp); - } + else + shm_unlock(shp); return 0; } -- 2.47.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] ipc/shm: serialize orphan cleanup with shm_nattch updates 2026-04-30 5:21 ` [PATCH 1/1] ipc/shm: serialize orphan cleanup with shm_nattch updates Ren Wei @ 2026-04-30 15:37 ` Andrew Morton 2026-05-02 18:51 ` Davidlohr Bueso 0 siblings, 1 reply; 3+ messages in thread From: Andrew Morton @ 2026-04-30 15:37 UTC (permalink / raw) To: Ren Wei Cc: linux-kernel, ljs, Liam.Howlett, brauner, kees, aha310510, sergeh, segoon, yuantan098, yifanwucs, tomapufckgml, bird, zylzyl2333, Oleg Nesterov, Serge Hallyn, Vasiliy Kulikov, Davidlohr Bueso On Thu, 30 Apr 2026 13:21:34 +0800 Ren Wei <n05ec@lzu.edu.cn> wrote: > From: Yilin Zhu <zylzyl2333@gmail.com> > > shm_destroy_orphaned() walks the shm idr under shm_ids(ns).rwsem, but > that does not serialize all fields tested by shm_may_destroy(). In > particular, shm_nattch is updated while holding shm_perm.lock, and attach > paths can do that without holding the rwsem. > > Do not decide that an orphaned segment is unused before taking the object > lock. Move the shm_may_destroy() check under shm_perm.lock, matching the > other destroy paths, and unlock the segment when it no longer qualifies > for removal. Thanks. > Fixes: 4c677e2eefdb ("shm: optimize locking and ipc_namespace getting") Let's cc more people who were involved in 4c677e2eefdb. And Davidlohr, who might have opinions. > Cc: stable@kernel.org > Reported-by: Yuan Tan <yuantan098@gmail.com> > Reported-by: Yifan Wu <yifanwucs@gmail.com> > Reported-by: Juefei Pu <tomapufckgml@gmail.com> > Reported-by: Xin Liu <bird@lzu.edu.cn> > Signed-off-by: Yilin Zhu <zylzyl2333@gmail.com> > Signed-off-by: Ren Wei <n05ec@lzu.edu.cn> > --- > ipc/shm.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/ipc/shm.c b/ipc/shm.c > index a95dae447707..b3e8a58e177d 100644 > --- a/ipc/shm.c > +++ b/ipc/shm.c > @@ -418,15 +418,17 @@ static int shm_try_destroy_orphaned(int id, void *p, void *data) > * We want to destroy segments without users and with already > * exit'ed originating process. > * > - * As shp->* are changed under rwsem, it's safe to skip shp locking. > + * shm_nattch can be changed under shm_perm.lock without holding the > + * rwsem, so take the object lock before checking shm_may_destroy(). > */ > if (!list_empty(&shp->shm_clist)) > return 0; > > - if (shm_may_destroy(shp)) { > - shm_lock_by_ptr(shp); > + shm_lock_by_ptr(shp); > + if (shm_may_destroy(shp)) > shm_destroy(ns, shp); > - } > + else > + shm_unlock(shp); > return 0; > } ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] ipc/shm: serialize orphan cleanup with shm_nattch updates 2026-04-30 15:37 ` Andrew Morton @ 2026-05-02 18:51 ` Davidlohr Bueso 0 siblings, 0 replies; 3+ messages in thread From: Davidlohr Bueso @ 2026-05-02 18:51 UTC (permalink / raw) To: Andrew Morton Cc: Ren Wei, linux-kernel, ljs, Liam.Howlett, brauner, kees, aha310510, sergeh, segoon, yuantan098, yifanwucs, tomapufckgml, bird, zylzyl2333, Oleg Nesterov, Serge Hallyn On Thu, 30 Apr 2026, Andrew Morton wrote: >On Thu, 30 Apr 2026 13:21:34 +0800 Ren Wei <n05ec@lzu.edu.cn> wrote: > >> From: Yilin Zhu <zylzyl2333@gmail.com> >> >> shm_destroy_orphaned() walks the shm idr under shm_ids(ns).rwsem, but >> that does not serialize all fields tested by shm_may_destroy(). In >> particular, shm_nattch is updated while holding shm_perm.lock, and attach >> paths can do that without holding the rwsem. >> >> Do not decide that an orphaned segment is unused before taking the object >> lock. Move the shm_may_destroy() check under shm_perm.lock, matching the >> other destroy paths, and unlock the segment when it no longer qualifies >> for removal. > >Thanks. > >> Fixes: 4c677e2eefdb ("shm: optimize locking and ipc_namespace getting") > >Let's cc more people who were involved in 4c677e2eefdb. > >And Davidlohr, who might have opinions. The same feedback as the previous (duplicate) patch - there is no need to unconditionally take the lock. https://lore.kernel.org/all/20260406193322.cu2rrtfmpixlv7yy@offworld/ Thanks, Davidlohr ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-05-02 18:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <cover.1777410234.git.zylzyl2333@gmail.com>
2026-04-30 5:21 ` [PATCH 1/1] ipc/shm: serialize orphan cleanup with shm_nattch updates Ren Wei
2026-04-30 15:37 ` Andrew Morton
2026-05-02 18:51 ` Davidlohr Bueso
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®