Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp6208ybl; Tue, 7 Jan 2020 13:01:57 -0800 (PST) X-Google-Smtp-Source: APXvYqz8cWTEfVzTzgOnF0hhBHTJIvWYnwMyjkVPDFFyz3cmHYnAwV/LpM+5GgU3765VLhh5tPOA X-Received: by 2002:aca:503:: with SMTP id 3mr336106oif.106.1578430917731; Tue, 07 Jan 2020 13:01:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578430917; cv=none; d=google.com; s=arc-20160816; b=uxN8oTO1FpYclnMNmtGYfyM2ijjO+2UrBCZXjiBlr9F2BhEYCYDb+elfbjvj0pIpeN 96tyMEdfx7athtQqCQg9+/kYagWQkdSguI4xGZWIGoLl7/dbKXNsTmf7Y6/TmuJLchvt ZH+9L9MVA/T0A5nefFGAHQ6NGWJX32ZM4/MaWFs9yu1FhYwCSiCcHw6ZXzQQ1qJq+Na6 vVJiUZ9QH85GaygPOOUBkSKfweHgqDR/O9s4ZPHFe7L3WuqGHPY4oog/zzCFdAGGs5+3 PObC1Nn4tWTjHILO9F52Zv65+mGUyRymeVzKfYIpEHIjHhzhIpu4R9+G7f7RShcEBAm2 O6Wg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=nFa4e1dQFnCNcOfTavT+lX/tnbYopIrQFuAOPihuzk8=; b=Lldj6xupCoSjmoT1jdYsYKqmUPxLnlkMVm5e6sGGt2KcsWE/BJxWg/7RlcgD6wJCij ezyTVD/EVe4UtMt69EjYVRhAsQC0YHQLj1w+2u9RCu9QWlx33yqpN3kfEjX7FGJxkoO2 NHcwfiKj6Wh4jo+9qUr+/Ylbik84vPIjq+oQgv9rylz8mAQ52bZ2U0CAT3qcQ4w9/+1Q p2QApXfVmHVKL5Z0o34WWbkNUPuiPn7TsOwr24h5va9l8XcMuMNtCSRojYb10LTfS013 NJCxF1gP2G/svzwK5/6aCQeAGaqfoPcx6b38KoD0opo/Fta/mPTBxRCF88PNeSBc2vc9 Am6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ocxYkOGQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c11si588396otf.91.2020.01.07.13.01.43; Tue, 07 Jan 2020 13:01:57 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ocxYkOGQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727196AbgAGU70 (ORCPT + 99 others); Tue, 7 Jan 2020 15:59:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:60404 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727682AbgAGU7Y (ORCPT ); Tue, 7 Jan 2020 15:59:24 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7088A2081E; Tue, 7 Jan 2020 20:59:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578430763; bh=n5L0mhRFhOsdPG+0N1NERmVhBdGYAZhbvoWeDAjmwXQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ocxYkOGQZSLEy/aNiqq8JF2pqXmQBh5k0t21a4SU6EOZw4BCiuNg+wIBUbqBtzNJl zh5IWQcA5PDSHylVdp7HeGl1nOn6sjZbrU66RLU/BDPumYkV0EHQdpcXeD3AWVEkR7 RkUvG6vZJt/2BKaQ5l9HeYBdVaFxoSCCRdqxuDt0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Paul Durrant , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Juergen Gross , Sasha Levin Subject: [PATCH 5.4 050/191] xen-blkback: prevent premature module unload Date: Tue, 7 Jan 2020 21:52:50 +0100 Message-Id: <20200107205335.681093000@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200107205332.984228665@linuxfoundation.org> References: <20200107205332.984228665@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Paul Durrant [ Upstream commit fa2ac657f9783f0891b2935490afe9a7fd29d3fa ] Objects allocated by xen_blkif_alloc come from the 'blkif_cache' kmem cache. This cache is destoyed when xen-blkif is unloaded so it is necessary to wait for the deferred free routine used for such objects to complete. This necessity was missed in commit 14855954f636 "xen-blkback: allow module to be cleanly unloaded". This patch fixes the problem by taking/releasing extra module references in xen_blkif_alloc/free() respectively. Signed-off-by: Paul Durrant Reviewed-by: Roger Pau Monné Signed-off-by: Juergen Gross Signed-off-by: Sasha Levin --- drivers/block/xen-blkback/xenbus.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c index b90dbcd99c03..c4cd68116e7f 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -171,6 +171,15 @@ static struct xen_blkif *xen_blkif_alloc(domid_t domid) blkif->domid = domid; atomic_set(&blkif->refcnt, 1); init_completion(&blkif->drain_complete); + + /* + * Because freeing back to the cache may be deferred, it is not + * safe to unload the module (and hence destroy the cache) until + * this has completed. To prevent premature unloading, take an + * extra module reference here and release only when the object + * has been freed back to the cache. + */ + __module_get(THIS_MODULE); INIT_WORK(&blkif->free_work, xen_blkif_deferred_free); return blkif; @@ -320,6 +329,7 @@ static void xen_blkif_free(struct xen_blkif *blkif) /* Make sure everything is drained before shutting down */ kmem_cache_free(xen_blkif_cachep, blkif); + module_put(THIS_MODULE); } int __init xen_blkif_interface_init(void) -- 2.20.1