Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp4721928pxv; Tue, 6 Jul 2021 07:40:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzytDOi21/+1raH8zhd8ZJfoFe2sV/dBbF1yjUNyVjckEHt8WQNzVvOiTp6/bixWWr3RUrI X-Received: by 2002:aa7:dad3:: with SMTP id x19mr6017164eds.310.1625582433984; Tue, 06 Jul 2021 07:40:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625582433; cv=none; d=google.com; s=arc-20160816; b=LyuWVlZg+ZoN3nvCcKNyhWWFd7WcXr2H8Cmt+DBnSPy0LNQtlkAlDw1kuPkxeDQg1D gjlw7Qgts2amldYphF75A1nNcAl+bdmvnAstQjQmX8ceslUOpA5iSg1kW9r0XAETmbzP NOm99a2U262LDu2dC/VqqxafDHtU3htUccfHe7awRxfwS/qjYQpuXm328GT2bw4+LpoG nVeAV0sZC5pX2GbhhtFGeb2afsM77hKcgOMBFzfRdKLPR8ld7KCDL7cwv5bdPhE5/50g TI1CM/rxCSZIPX6qswFHtdlBoARpkZUB/2vAkSQLpFCc3XbVZOWqUktoQq2m4OZsU+Kq vexw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=zYN3y6K/Ru9pQCFBk1RENryPpJolMihOWyrIBqKeHAs=; b=FUciM9VE7mEWIKJB0aWNrlqOngmrhl/AhZ7602Wr/fns5QqBt1vsNI0Qhql0jDvcPt 5Ucoz8l2A4KyUGox/gWXzjMF036Z9w7fud/vQSgdF9YFRrvaFgjnpXZJxABM3Qi0pnPb i2nRomMhhRua2dmQVuwsAiQbz+oYmzde19esVBnsMKw+L9SzIGOjfBB6mqBsig26GinE kUsSwgisxBEN9CsUWI2VeXJCCJhKWGiJIqmLvLNuxS9kC0lV1W0woqFsuhHtOvzH0x1Q 2LPtTrYw9p4d0IgW7r4lBr3XADL4nJ4WdDuQjAbxvT5/vaAQiVo8WrC5lzYOu8P0sbTE ZLkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=XpVGZ1TN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gb8si19069227ejc.486.2021.07.06.07.40.08; Tue, 06 Jul 2021 07:40:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=XpVGZ1TN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232136AbhGFNnR (ORCPT + 99 others); Tue, 6 Jul 2021 09:43:17 -0400 Received: from relay.sw.ru ([185.231.240.75]:36062 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232064AbhGFNnP (ORCPT ); Tue, 6 Jul 2021 09:43:15 -0400 X-Greylist: delayed 1047 seconds by postgrey-1.27 at vger.kernel.org; Tue, 06 Jul 2021 09:43:15 EDT DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-Id:Date:Subject:From: Content-Type; bh=zYN3y6K/Ru9pQCFBk1RENryPpJolMihOWyrIBqKeHAs=; b=XpVGZ1TNzgAa HS2iTgdubgzW26aKd5UbMIb4b3ZiYUYCj4zWSkxoB/iMNwoufRImmMsdzSnelRiDK8q8FTox4fNgH R2Kj/H/OsVIUZMNgbSgODzTY/CK/SLFBx6r5r1iSNO0smRxCLQJrQurtOdRs9C2WpJO+SFm0P9rjJ QD3ZU=; Received: from [192.168.15.247] (helo=mikhalitsyn-laptop.sw.ru) by relay.sw.ru with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1m0l2a-0034RU-31; Tue, 06 Jul 2021 16:23:08 +0300 From: Alexander Mikhalitsyn To: linux-kernel@vger.kernel.org Cc: Alexander Mikhalitsyn , Andrew Morton , Milton Miller , Jack Miller , Pavel Tikhomirov , Alexander Mikhalitsyn , stable@vger.kernel.org Subject: [PATCH 1/2] shm: skip shm_destroy if task IPC namespace was changed Date: Tue, 6 Jul 2021 16:22:58 +0300 Message-Id: <20210706132259.71740-2-alexander.mikhalitsyn@virtuozzo.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210706132259.71740-1-alexander.mikhalitsyn@virtuozzo.com> References: <20210706132259.71740-1-alexander.mikhalitsyn@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Task may change IPC namespace by doing setns() but sysvshm objects remains at the origin IPC namespace (=IPC namespace where task was when shmget() was called). Let's skip forced shm destroy in such case because we can't determine IPC namespace by shm only. These problematic sysvshm's will be destroyed on ipc namespace cleanup. Fixes: ab602f79915 ("shm: make exit_shm work proportional to task activity") Cc: Andrew Morton Cc: Milton Miller Cc: Jack Miller Cc: Pavel Tikhomirov Cc: Alexander Mikhalitsyn Cc: stable@vger.kernel.org Signed-off-by: Alexander Mikhalitsyn --- ipc/shm.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ipc/shm.c b/ipc/shm.c index 748933e376ca..70a41171b8bb 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -173,6 +173,14 @@ static inline struct shmid_kernel *shm_obtain_object_check(struct ipc_namespace return container_of(ipcp, struct shmid_kernel, shm_perm); } +static inline bool is_shm_in_ns(struct ipc_namespace *ns, struct shmid_kernel *shp) +{ + int idx = ipcid_to_idx(shp->shm_perm.id); + struct shmid_kernel *tshp = shm_obtain_object(ns, idx); + + return !IS_ERR(tshp) && tshp == shp; +} + /* * shm_lock_(check_) routines are called in the paths where the rwsem * is not necessarily held. @@ -415,7 +423,7 @@ void exit_shm(struct task_struct *task) list_for_each_entry_safe(shp, n, &task->sysvshm.shm_clist, shm_clist) { shp->shm_creator = NULL; - if (shm_may_destroy(ns, shp)) { + if (is_shm_in_ns(ns, shp) && shm_may_destroy(ns, shp)) { shm_lock_by_ptr(shp); shm_destroy(ns, shp); } -- 2.31.1