Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3138007pxj; Mon, 14 Jun 2021 15:36:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxyBBC3gDXVQpbTTx413z0EJldFt83NnbmPpNakHJ3WgXr6LsCXMdKiLNGulvZ/0OvWYJSr X-Received: by 2002:aa7:d817:: with SMTP id v23mr19283102edq.300.1623710162701; Mon, 14 Jun 2021 15:36:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623710162; cv=none; d=google.com; s=arc-20160816; b=juEogWZQWvzaUSkWdI2MpjjQ72xWZt5ltBItj0YnEelAq8+4mIHr9+ow/v08o3P+aG 3qlIZTkcgQvMaxgCmKhOvrwNtOtz/VsCuxm7lm5S5sVkDHzydt6G+GYndZ2fON+KoH2M TwdrJ56ATNyf1QNWOcGBxTyb7IKCu0hPtyzbpTv/FAz4It7LG74kTyAZVc9755FEwW6f vJlaZBcq2eOq+vRmdE1ITAufTKRuboRSgDP7kLDw0o8rdZ6d76UMcG3zwBk9Z2Bftcly dqtNvD5sW6/NG/OucE8O6r7bOv4vd4ezda18Vhvo59wAKVtO/gZPVGANgAQzMYCnbzUg l6bQ== 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:dkim-filter; bh=mVFlta1lvpZWJko9NEbj/Wtu6sfsupZjOjRefxYKJ1Q=; b=Gub+V9pGnUGZPhc0BRS3LDBA/IFy1PViyvS45bN34dKs5oRPI5u4bheaEHPzXpPGDi iSqsJJ1Ap6EMd0kCBkVO99j+jbbJ/05Em89UR1RJFdGbkfkrWwyMAgCRbTFgIOiVlXA/ Z4q0Y483yhd/KbRAUDS6Zgx82ZriYCeWD+H6w1CwG1Y79pGamJ4Cpmo10TuXEnEh+UvB DnxxOtdUs89kva87tJfFCMhmpr10G/B+HWtTMkzWp+3Dhz1EvinIU64tVHXYyMD3nDy9 2lyr388FCNUzHaFc6ezKgKo+wt/RtK2u+PMaL97JbOC+68KSbzsYLqz6Nh9DxeGmZ4Gv z1Dg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=NP9qUOjF; 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=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j3si12913937ejj.448.2021.06.14.15.35.39; Mon, 14 Jun 2021 15:36:02 -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=@linux.microsoft.com header.s=default header.b=NP9qUOjF; 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=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231659AbhFNWfp (ORCPT + 99 others); Mon, 14 Jun 2021 18:35:45 -0400 Received: from linux.microsoft.com ([13.77.154.182]:56062 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231646AbhFNWfi (ORCPT ); Mon, 14 Jun 2021 18:35:38 -0400 Received: from sequoia.work.tihix.com (162-237-133-238.lightspeed.rcsntx.sbcglobal.net [162.237.133.238]) by linux.microsoft.com (Postfix) with ESMTPSA id E0C3020B83C5; Mon, 14 Jun 2021 15:33:33 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com E0C3020B83C5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1623710014; bh=mVFlta1lvpZWJko9NEbj/Wtu6sfsupZjOjRefxYKJ1Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NP9qUOjFytU37i8aC3m1vIRZtSOYKeaclqy2uSuWC9jCCtc0B8Pu2vjqTFTh28N12 BehMzv5/0Jtq+Asy2T7kol0uWKQ1U3c8eLiUf5frQufmc1zdvcoDEtC2M+B2q3n/GR pBbPysLhlIWuRqjaq/ScXBl79xqF0vhQaEmSwzMs= From: Tyler Hicks To: Jens Wiklander , Allen Pais , Sumit Garg , Peter Huewe , Jarkko Sakkinen , Jason Gunthorpe , Vikas Gupta Cc: Thirupathaiah Annapureddy , Pavel Tatashin , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , op-tee@lists.trustedfirmware.org, linux-integrity@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 2/8] optee: Refuse to load the driver under the kdump kernel Date: Mon, 14 Jun 2021 17:33:11 -0500 Message-Id: <20210614223317.999867-3-tyhicks@linux.microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210614223317.999867-1-tyhicks@linux.microsoft.com> References: <20210614223317.999867-1-tyhicks@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix a hung task issue, seen when booting the kdump kernel, that is caused by all of the secure world threads being in a permanent suspended state: INFO: task swapper/0:1 blocked for more than 120 seconds. Not tainted 5.4.83 #1 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. swapper/0 D 0 1 0 0x00000028 Call trace: __switch_to+0xc8/0x118 __schedule+0x2e0/0x700 schedule+0x38/0xb8 schedule_timeout+0x258/0x388 wait_for_completion+0x16c/0x4b8 optee_cq_wait_for_completion+0x28/0xa8 optee_disable_shm_cache+0xb8/0xf8 optee_probe+0x560/0x61c platform_drv_probe+0x58/0xa8 really_probe+0xe0/0x338 driver_probe_device+0x5c/0xf0 device_driver_attach+0x74/0x80 __driver_attach+0x64/0xe0 bus_for_each_dev+0x84/0xd8 driver_attach+0x30/0x40 bus_add_driver+0x188/0x1e8 driver_register+0x64/0x110 __platform_driver_register+0x54/0x60 optee_driver_init+0x20/0x28 do_one_initcall+0x54/0x24c kernel_init_freeable+0x1e8/0x2c0 kernel_init+0x18/0x118 ret_from_fork+0x10/0x18 The invoke_fn hook returned OPTEE_SMC_RETURN_ETHREAD_LIMIT, indicating that the secure world threads were all in a suspended state at the time of the kernel crash. This intermittently prevented the kdump kernel from booting, resulting in a failure to collect the kernel dump. Make kernel dump collection more reliable on systems utilizing OP-TEE by refusing to load the driver under the kdump kernel. Cc: stable@vger.kernel.org Signed-off-by: Tyler Hicks Reviewed-by: Jens Wiklander --- drivers/tee/optee/core.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index ddb8f9ecf307..5288cd767d82 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -6,6 +6,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include +#include #include #include #include @@ -612,6 +613,16 @@ static int optee_probe(struct platform_device *pdev) u32 sec_caps; int rc; + /* + * The kernel may have crashed at the same time that all available + * secure world threads were suspended and we cannot reschedule the + * suspended threads without access to the crashed kernel's wait_queue. + * Therefore, we cannot reliably initialize the OP-TEE driver in the + * kdump kernel. + */ + if (is_kdump_kernel()) + return -ENODEV; + invoke_fn = get_invoke_func(&pdev->dev); if (IS_ERR(invoke_fn)) return PTR_ERR(invoke_fn); -- 2.25.1