Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1747229ybl; Sat, 11 Jan 2020 02:01:17 -0800 (PST) X-Google-Smtp-Source: APXvYqyltH9/9wKqFvvBtRptJS/LSPw50EuqZgWay8Ole4m/FTMzHfqjv76xHi25PtmEGViXQYX7 X-Received: by 2002:a05:6830:1e16:: with SMTP id s22mr6241087otr.340.1578736877362; Sat, 11 Jan 2020 02:01:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578736877; cv=none; d=google.com; s=arc-20160816; b=uBVCkM3x/9VePtcsO9g9X6+Y1pU+9Em1S32c5+NN6/D8VnBRW0Q5grHWEOksq/IvY+ nKOj2OS+i4IpwpNSt8osSXY8tqPRZ7GJYQBTqOUgHCPvBdEtP82u58EFcy1Kwv0qRm+z Mid1kE+w/jjcZrqdx9eHnqn4ZbW9faWRWQi5nvmW6a3tEYJCU6sXrUqyiKzDdsdWoATX QTEg3dNg1DllL9TZfj2gITheYf/1qtL9bXtvMn2H4jiZOtVPPKzuEcTWPtOUty9Y6FHf +6aOe4Bk8lYtrCZQUFfupf0zvaBOM2CUz1o4ALIlllnCXxPulTCR1P+ESNsn3iQOJIOE qTPw== 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=Wc2Vc8rFLSGKUQ26JcGDz7SCrbBxB1/foQKpUwf0L7E=; b=l8DltZPL/YvFNFCayl3vGVk9zzdJ587TfuTlt6MMVrUvtvgSzHQwH0gaWYpkSJwnE+ y8i/DhdYYdx5vzUMLVlP+fWpruCsXU7QJaPtaQfTaNAI7tffNRu1gf2sHkyw52/N97kr TMZN+wFJpkl4kRYyyXF373fYu+mGo3Wo6SNZ6kTnsDzzR9lxEOtpXHIdzVKX//S6oKnE T+2D7EPELHCr0dqdc5FmAuKEZ6UwspDyAqJJXvNaGruPRX/7bt8qzQsvKGhJGlHIxHhk WbVRZeCvEl9lyS9dhFPRhakEYqOMUGC5lqZOF/e0d6ELeidyIfYMjHF3SFL/vQywB84C mDaw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=RzMvGXo8; 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 p25si3032199oto.191.2020.01.11.02.01.05; Sat, 11 Jan 2020 02:01:17 -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=RzMvGXo8; 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 S1729409AbgAKKAL (ORCPT + 99 others); Sat, 11 Jan 2020 05:00:11 -0500 Received: from mail.kernel.org ([198.145.29.99]:55840 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729388AbgAKKAH (ORCPT ); Sat, 11 Jan 2020 05:00:07 -0500 Received: from localhost (unknown [62.119.166.9]) (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 A8CAB2082E; Sat, 11 Jan 2020 10:00:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578736807; bh=NfbA8pO07EswMY0SuPWfahwVm7jF59HzRXEitD+Noqg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RzMvGXo8/rZRc9RQJjnXp+8JSvvazDOoZgv1Q40tnAITjNXvK2c1N39REXuGRyFhb mU34+0/P7wDrrZQ+bocLLUxvlX3sk7rjykHPQr98Wmr+g9U2Z33IoRt6/CYjHsAh+9 WgLNRlrQ9vlA+pSB6k+OlwTqH9uOknGYHvKydOdc= 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 4.9 12/91] xen-blkback: prevent premature module unload Date: Sat, 11 Jan 2020 10:49:05 +0100 Message-Id: <20200111094847.475565864@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200111094844.748507863@linuxfoundation.org> References: <20200111094844.748507863@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 ad736d7de838..1d1f86657967 100644 --- a/drivers/block/xen-blkback/xenbus.c +++ b/drivers/block/xen-blkback/xenbus.c @@ -178,6 +178,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; @@ -322,6 +331,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