Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp257855pxx; Thu, 29 Oct 2020 01:42:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzkUMm1g5yiyqgOtaJm8rIr6DpNtkb1yJ667MY1S7iIDGVF5qmpWoG8I7KCg2i22KksacSR X-Received: by 2002:a17:906:8688:: with SMTP id g8mr3031338ejx.535.1603960977775; Thu, 29 Oct 2020 01:42:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603960977; cv=none; d=google.com; s=arc-20160816; b=uTPuji6mhbx8WeCLsy/lpbyZbCjy7cGbcJBDh92nH0SKP2fF1kOf9tTyzRxPt8RV4j RD5kfYCsEUHMtsAuQRADTKmDalZBLYHiubL/Hp/1AXzKNX2WNLzzod0jnXT6H0o3GD/O 0jQKDs2MI7a0wWNL8Kq941cvX21IkoXhu2ZGCuRwkqN1yPTEgUYoLg+fO4MXOF2PjMxq LOn7XXscRRh9Eup69vyg028R2HSoxrQlIvIBliQ/1ETq/VpUyBC+633/3nx3w+nIFRmd R6/E+2hoH+2QaePKNQ4/xcLjP8q0rN1V6UpuyaUJTKLgb1cbh/QR6umhNPQZj3zWV7+/ PxkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=KEOe6ZmNiVgTTFd09OfHra6+vd2PO/ej4pjH/p4yR1Q=; b=ZmYxh8kvcoGJvmb1aT9sGHzTiRAtYHr4lCRIcqvxbwt3YS8xoGIl9B1ZPbTOh6/BsF M+2A0zAHhdtqzY+HHMSCDWSaI2ubxJ8opYAfdWJGZG7be2SmXECgN93i/bY7ZuHxAac0 LyCJ4A6mM6EdYdRRDekfEGlJKsiPmWDHg1JWpUDRrWKFpkZsKtQluggRIxQ5uCbJBgRR zXY7BE+5QZ6cmH2ark4GB5Bw32FjJSTxsYZixKYWG3tKlp3rqZkE6cF3eDDgFfTgYso9 g815wAl95cOQCJnIwDHcjrNQpaa7ltsu7tBzileGnpDkT3ZxiGholLrRSLdJQ5NeAA5c 7niw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="CY/O0b6K"; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ch9si1445232edb.172.2020.10.29.01.42.35; Thu, 29 Oct 2020 01:42:57 -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=@kernel.org header.s=default header.b="CY/O0b6K"; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404076AbgJ2BB1 (ORCPT + 99 others); Wed, 28 Oct 2020 21:01:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:60506 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731508AbgJ1WR1 (ORCPT ); Wed, 28 Oct 2020 18:17:27 -0400 Received: from linux-8ccs (p57a236d4.dip0.t-ipconnect.de [87.162.54.212]) (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 1FD2824709; Wed, 28 Oct 2020 12:21:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1603887671; bh=5zAZ59dxvdbTmx70RmxNAB7Own5NvWVOautNnVo9W1U=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=CY/O0b6KyuWbUxIz6O2QRpemZqsP6Fhu7NYEJVpyFJVNYZmoHGYV1fmR/PIFFb4Nv LVm6eee/1zGfmKdtDZE2x/+FAUKPbYVkOa6rVP+X0gMmKfkGzxJJuE1mWnVBmNpP4l GMhZV+S457TZXf0oF8MQrzRQzCi/zCsnUtvwDPUU= Date: Wed, 28 Oct 2020 13:21:06 +0100 From: Jessica Yu To: Miroslav Benes Cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] module: set MODULE_STATE_GOING state when a module fails to load Message-ID: <20201028122106.GA6867@linux-8ccs> References: <20201027140336.15409-1-mbenes@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20201027140336.15409-1-mbenes@suse.cz> X-OS: Linux linux-8ccs 4.12.14-lp150.12.61-default x86_64 User-Agent: Mutt/1.10.1 (2018-07-13) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org +++ Miroslav Benes [27/10/20 15:03 +0100]: >If a module fails to load due to an error in prepare_coming_module(), >the following error handling in load_module() runs with >MODULE_STATE_COMING in module's state. Fix it by correctly setting >MODULE_STATE_GOING under "bug_cleanup" label. > >Signed-off-by: Miroslav Benes >--- > kernel/module.c | 1 + > 1 file changed, 1 insertion(+) > >diff --git a/kernel/module.c b/kernel/module.c >index a4fa44a652a7..b34235082394 100644 >--- a/kernel/module.c >+++ b/kernel/module.c >@@ -3991,6 +3991,7 @@ static int load_module(struct load_info *info, const char __user *uargs, > MODULE_STATE_GOING, mod); > klp_module_going(mod); > bug_cleanup: >+ mod->state = MODULE_STATE_GOING; > /* module_bug_cleanup needs module_mutex protection */ > mutex_lock(&module_mutex); > module_bug_cleanup(mod); Thanks for the fix! Hmm, I am wondering if we also need to set the module to GOING if it happens to fail while it is still UNFORMED. Currently, when a module is UNFORMED and encounters an error during load_module(), it stays UNFORMED until it finally goes away. That sounds fine, but try_module_get() technically permits you to get a module while it's UNFORMED (but not if it's GOING). Theoretically someone could increase the refcount of an unformed module that has encountered an error condition and is in the process of going away. This shouldn't happen if we properly set the module to GOING whenever it encounters an error during load_module(). But - I cannot think of a scenario where someone could call try_module_get() on an unformed module, since find_module() etc. do not return unformed modules, so they shouldn't be visible outside of the module loader. So in practice, I think we're probably safe here..