Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp3775033pxt; Tue, 10 Aug 2021 11:02:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyIIdrNmIuXMx0O1w3WLarNix4kgtoPxj+CrBxEvoUgg8qfOkI6qgyJeF4VT9t7erHDiyB2 X-Received: by 2002:a5e:d91a:: with SMTP id n26mr914770iop.96.1628618563486; Tue, 10 Aug 2021 11:02:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628618563; cv=none; d=google.com; s=arc-20160816; b=XnwrTajCUmFm8yFDZqB6/JxbXH1E5J03m2J3CoJKUY2qVz5IxXb8emaMA0iKx/h6E7 9fEPXSRJ2+9ALWtA0O2+yRdP2B6Pb2V4ge5G1KflPorlhD2nSQG0pW3YH6lNEGnI8r09 IXhxeCd8MwwAYdTGQNze/vvfEIpYALn2XkznckGWN2gOvJfzfzcxaSmmdxliu5IiDoRR y8oO2rLQXPYObrFcwN0jZ1EYTrN1WK42o++DWrk0RceIyFaNTac6Y3GwJOdU5AugzQtE cY/gr3+sOG6yWeHz8hQkKdpqSeXgFNItSjehzPHaxIYwbAJdjP4Dr186cyVI2UM0tH3E aa+g== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=eTon/CQNAMfTE2hrfn7zrR6SlAWSah1DdtO8L65X9u8=; b=cr8i3le4Fz3iNoB8EXQy6JwMpXjVdLnDEngT7mjdrPNKmi2fjLC2I+ZMO0NVcYJMKI TYOgXd9zekQB80ImFrpMji/i8d7uZ0ShW/q5x8MGsnCFLFMVyln9bygi4B1WgojtIWiG /o41FnLETWqPFvl1VcNLuN5Ib+z9xcpxeFIQFTecbntm8wWSgBZi9XqDcffzvFOJWxT4 sKxvIIBL82yPnEOAWKIw8IlYg995UceSU8SGXR/A2Ydd9nZGl6ecjKaBFw18haw57n/q IMIKCl9Ti9JcqqE4y44YOHgenYMiGBmhP1pbsLZZpAKniibdT/wRMfLvp+dFvT2IWpZi ySiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="s++eWm/N"; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a9si14410062jat.116.2021.08.10.11.02.28; Tue, 10 Aug 2021 11:02:43 -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=@linuxfoundation.org header.s=korg header.b="s++eWm/N"; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237655AbhHJSB3 (ORCPT + 99 others); Tue, 10 Aug 2021 14:01:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:33404 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234428AbhHJR6x (ORCPT ); Tue, 10 Aug 2021 13:58:53 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D731D6109E; Tue, 10 Aug 2021 17:45:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1628617560; bh=OK1lbszpzHAL0zQ7PVkci79wU+TeslVIa+LxOjcUW+s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s++eWm/Nhb6Qp0OBNAWWLyWDgpItQbMab3dV1kFIbmuYJHvLTsS/VfFxqN1Fu5oyb wWWPiivbRm1YlA2gpS2O5LMdR9ntIqte+vQsCJMLe3sVPB97Sv31K9pr6STI4NqMeC eC0u6gjDxQ/7tqHXTIEzYMMehgrhRMCa5OjzQxAs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tyler Hicks , Jens Wiklander , Sumit Garg Subject: [PATCH 5.13 113/175] optee: Refuse to load the driver under the kdump kernel Date: Tue, 10 Aug 2021 19:30:21 +0200 Message-Id: <20210810173004.676680209@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210810173000.928681411@linuxfoundation.org> References: <20210810173000.928681411@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tyler Hicks commit adf752af454e91e123e85e3784972d166837af73 upstream. 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 Reviewed-by: Sumit Garg Signed-off-by: Jens Wiklander Signed-off-by: Greg Kroah-Hartman --- drivers/tee/optee/core.c | 11 +++++++++++ 1 file changed, 11 insertions(+) --- 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 @@ -613,6 +614,16 @@ static int optee_probe(struct platform_d 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);