Received: by 10.223.185.111 with SMTP id b44csp1452604wrg; Sat, 10 Mar 2018 06:17:57 -0800 (PST) X-Google-Smtp-Source: AG47ELvdE8ysXDzFztoEGLWJ7k789p7uBUeiIWERw0ri3ADTAEB9SLRKS/s1ZRKrzUVv5W55/4r8 X-Received: by 2002:a17:902:624:: with SMTP id 33-v6mr2197294plg.126.1520691477203; Sat, 10 Mar 2018 06:17:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520691477; cv=none; d=google.com; s=arc-20160816; b=PbZ4D4E1VB13ezkpv7SJFBdTLrCLcG6jeQNunrbkX5/4oKy5dUhv0gxhX03ZvUnZUJ /gvtCWAU3mbNYKzuYoriSxrVTiqMoOnP9vyZQ0Fbbee3KJ2rTcWI4HhC8QM0UIyY6r48 PfgP82lcsnHuW2/ofKza7M7iJamiAoACu4kQPI9xJ9jJgyylBZ6lfYRtHbYxXWfHK7+/ NMCT1j787+JI7yPhx07mlBYm01ntuDVsWECJEwy2QW6C2xqc9GlqQljRYEwmaltoGVEF uBkhF8ca7LxGVJAmPjPkz+sjU84IfmYr4kkictUWMVW8xw/d2svdwXlLfsH/UBstWiyW y3WQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:arc-authentication-results; bh=0QqgFL4HY3sGKxEUBzRn7+iGL9dot9QlO4G0WWyxSN8=; b=QbGK7t6Y40gBV3YZL3TO5tYH8sGW6ZaaUzJtr4Y3pVwxhj7rwGNqV82ixpIsQiSZ/X kQjN85fKluGrhZ+s8A6ww+UV672Xv9FsqbPcPk0jFFdKe1Jx99AURFQ7Hc/TOtY4BsAv JM+cPC+I5p+nJ8JnvtUTkFAScjgDVOsnINbC3ugBOEWEiGvjv+sgjyVG0T1GC4Hh2HSa 5tpv/5DranmJ2ShY9stH5jLTHNO7yU6y54L7+9zdBsc+ULAN3oaeKZHoIssn7WOxZu2v bqzu3z7drkIhafddlGVldwEH8pVH6Fi9rxbwCvo7gwPtnsM651It0VxYEOOOJoKpl8Bk uF5w== ARC-Authentication-Results: i=1; mx.google.com; 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 n64si2731231pfb.281.2018.03.10.06.17.42; Sat, 10 Mar 2018 06:17: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; 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 S933060AbeCJOQY (ORCPT + 99 others); Sat, 10 Mar 2018 09:16:24 -0500 Received: from mail.kernel.org ([198.145.29.99]:50934 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933181AbeCJOPf (ORCPT ); Sat, 10 Mar 2018 09:15:35 -0500 Received: from garbanzo.do-not-panic.com (c-73-15-241-2.hsd1.ca.comcast.net [73.15.241.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0D3FB217D2; Sat, 10 Mar 2018 14:15:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D3FB217D2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=mcgrof@kernel.org From: "Luis R. Rodriguez" To: gregkh@linuxfoundation.org Cc: akpm@linux-foundation.org, cantabile.desu@gmail.com, kubakici@wp.pl, linux-wireless@vger.kernel.org, keescook@chromium.org, shuah@kernel.org, mfuzzey@parkeon.com, zohar@linux.vnet.ibm.com, dhowells@redhat.com, pali.rohar@gmail.com, tiwai@suse.de, arend.vanspriel@broadcom.com, zajec5@gmail.com, nbroeking@me.com, markivx@codeaurora.org, broonie@kernel.org, dmitry.torokhov@gmail.com, dwmw2@infradead.org, torvalds@linux-foundation.org, Abhay_Salunke@dell.com, bjorn.andersson@linaro.org, jewalt@lgsinnovations.com, oneukum@suse.com, ast@fb.com, andresx7@gmail.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, "Luis R. Rodriguez" Subject: [PATCH v3 18/20] firmware: ensure the firmware cache is not used on incompatible calls Date: Sat, 10 Mar 2018 06:14:59 -0800 Message-Id: <20180310141501.2214-19-mcgrof@kernel.org> X-Mailer: git-send-email 2.13.2 In-Reply-To: <20180310141501.2214-1-mcgrof@kernel.org> References: <20180310141501.2214-1-mcgrof@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org request_firmware_into_buf() explicitly disables the firmware cache, meanwhile the firmware cache cannot be used when request_firmware_nowait() is used without the uevent. Enforce a sanity check for this to avoid future issues undocumented behaviours should misuses of the firmware cache happen later. One of the reasons we want to enforce this is the firmware cache is used for helping with suspend/resume, and if incompatible calls use it they can stall suspend. Signed-off-by: Luis R. Rodriguez --- drivers/base/firmware_loader/main.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index b569d8a09392..2913bb0e5e7b 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -431,6 +431,11 @@ static int fw_add_devm_name(struct device *dev, const char *name) return 0; } #else +static bool fw_cache_is_setup(struct device *dev, const char *name) +{ + return false; +} + static int fw_add_devm_name(struct device *dev, const char *name) { return 0; @@ -672,6 +677,9 @@ request_firmware_into_buf(const struct firmware **firmware_p, const char *name, { int ret; + if (fw_cache_is_setup(device, name)) + return -EOPNOTSUPP; + __module_get(THIS_MODULE); ret = _request_firmware(firmware_p, name, device, buf, size, FW_OPT_UEVENT | FW_OPT_NOCACHE); @@ -769,6 +777,12 @@ request_firmware_nowait( fw_work->opt_flags = FW_OPT_NOWAIT | (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER); + if (!uevent && fw_cache_is_setup(device, name)) { + kfree_const(fw_work->name); + kfree(fw_work); + return -EOPNOTSUPP; + } + if (!try_module_get(module)) { kfree_const(fw_work->name); kfree(fw_work); -- 2.16.2