[PATCH] ipc: only destroy orphaned shm segments on sysctl write

Jianlin Shi posted 1 patch 6 days ago
ipc/ipc_sysctl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] ipc: only destroy orphaned shm segments on sysctl write
Posted by Jianlin Shi 6 days ago
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.

Signed-off-by: Jianlin Shi <shijianlin11@foxmail.com>
---
 ipc/ipc_sysctl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ipc/ipc_sysctl.c b/ipc/ipc_sysctl.c
index 71d0a4ef5..8bf0e9a5f 100644
--- 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;
 }
-- 
2.43.0