From: Davidlohr Bueso <dave@stgolabs.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Jianlin Shi <shijianlin11@foxmail.com>,
linux-kernel@vger.kernel.org, ebiederm@kernel.org,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: [PATCH v2] ipc: only destroy orphaned shm segments on sysctl write
Date: Thu, 30 Jul 2026 12:32:31 -0700 [thread overview]
Message-ID: <20260730193231.h4mj32js6jomitvw@offworld> (raw)
In-Reply-To: <20260625160601.1a58f7e114be14161e710148@linux-foundation.org>
On Thu, 25 Jun 2026, Andrew Morton wrote:
>On Mon, 15 Jun 2026 10:27:41 +0800 Jianlin Shi <shijianlin11@foxmail.com> wrote:
>
>> proc_ipc_dointvec_minmax_orphans() currently calls
>> shm_destroy_orphaned() whenever shm_rmid_forced is set, including on
>> sysctl reads. Reading /proc/sys/kernel/shm_rmid_forced should not take
>> shm_ids rwsem for write and walk all segments.
>>
>> Only run the cleanup when the sysctl is written and the forced RMID
>> policy is enabled.
>>
>> When shm_rmid_forced=1, monitoring tools that read
>> /proc/sys/kernel/shm_rmid_forced trigger the cleanup on every read.
>>
>> ...
>>
>> --- a/ipc/ipc_sysctl.c
>> +++ b/ipc/ipc_sysctl.c
>> @@ -28,7 +28,7 @@ static int proc_ipc_dointvec_minmax_orphans(const struct ctl_table *table, int w
>>
>> if (err < 0)
>> return err;
>> - if (ns->shm_rmid_forced)
>> + if (write && ns->shm_rmid_forced)
>> shm_destroy_orphaned(ns);
>> return err;
>> }
>
>Seems reasonable, I guess. Maybe. It's not backward compatible.
>
>Nothing in the shm_rmid_forced documentation
>(Documentation/admin-guide/sysctl/kernel.rst) indicates that a read has
>any such side-effect.
>
>But there's a risk that users have discovered that a read has this
>effect, so they're using reads because that's a lot less hassle than
>figuring out what value to write.
>
>Davidlohr, Eric: any thoughts on this?
The only way I can justify this is that the doc is explicit about the
write, so users abusing the read can't really complain... and this is
also the more intuitive user expectation, and prevents unprivileged
users from doing destructive actions.
But also, afaict, for multi namespace use cases, this read effect has
less impact as of 85b6d24646e4 ("shm: extend forced shm destroy to support
objects from several IPC nses"). After that commit the reaping is done
per-segment - exit_shm() uses the segment's namespace instead of the
exiting task's - so the segment is destroyed by exit_shm() if the
creator dies while it is unattached, or by shm_close() on the last
detach, leaving a later sysctl read with nothing to find - albeit
still grabbing locks.
Acked-by: Davidlohr Bueso <dave@stgolabs.net>
(but I'm not opposed to dropping this patch and leaving this as is if
this is not a real problem/use case)
>
>btw, the doc says "if you change this from 0 to 1, already created
>segments without users and with a dead originative process will be
>destroyed" but the implementation will do the destruction for any write
>of a non-zero value. It should read "if a non-zero value is written
>already created segments without users and with a dead originative
>process will be destroyed". Minor detail.
Yes that non-zero rewording would match the code, but the doc's
explicit 0->1 does suggest doing the reap only when first enabling
it, instead of on demand if already enabled. But ultimately I agree
with this "non-zero" in the doc.
Thanks,
Davidlohr
prev parent reply other threads:[~2026-07-30 20:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-02 2:34 [PATCH] " Jianlin Shi
2026-06-15 2:27 ` [PATCH v2] " Jianlin Shi
2026-06-25 23:06 ` Andrew Morton
2026-07-27 4:44 ` Jianlin Shi
2026-07-30 19:32 ` Davidlohr Bueso [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260730193231.h4mj32js6jomitvw@offworld \
--to=dave@stgolabs.net \
--cc=akpm@linux-foundation.org \
--cc=ebiederm@kernel.org \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=shijianlin11@foxmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®