Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp2196912pxb; Fri, 25 Mar 2022 12:51:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhw++exP3fIcxQ8MlDd7WYxuVMyipa80ahHpz6Avv1uK1ruWA+YJeo+AgNCWIUNvB3uLx0 X-Received: by 2002:a17:902:ca13:b0:155:cea6:65b3 with SMTP id w19-20020a170902ca1300b00155cea665b3mr7469517pld.144.1648237869699; Fri, 25 Mar 2022 12:51:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648237869; cv=none; d=google.com; s=arc-20160816; b=jWs/9uJjNl1tPtZB8tIjACp442N3fWQ9936bt7VqH0lwXn3HF03dY7/CJRYl6+RmrT 2b23oTGQ5qzxa3UuOwWKjy3Un/+5KKqD0hvSr4zrR6GQ3NSYD/RhppjAmRmo2RTW+2XC 7foWUp1+NruBWJP+snENK1JcNFfBxhdpG4SHImvzk2RJGUQVnMok+yY1JzgRdp2TCNOv FTf9YHrnAxGbWTKpiLK7V5BecA0d1nm9AFku5tWPyRTTIGu1VMFKyyYg/a8AQx69XSEW ti7F2K84pKjbgqtfRxxtyh9c8ZeGP0hlB2XNkf8tS7tvg5gxEISpOg9R6YTjSDfPas2f uZYQ== 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=FeMbhQRnelhAVnjFFHbAjybHRINegpDRQSU2dKGLptw=; b=W63OoNGWpRnMI9XD9ezChoz7y2AMIUv+lzBBwEJhdAs0CTIwk6Ij7x+c8VSwo1kQpR 2eO0CpySdPYiBPpRpz9jcTjcWaYmyJFLGVvd8PfVYqNWlyK4APehBjN5udEyNvLLMGoB BY7cfn6SHPYKFVRb3XUC9Frhyz312O4vSSOnWvxOn6u8uHlqKljTnpQJm04lStVWNzJW IfpeS/2t48lqoyPOUc5kCEe82AIFeX1auBnBBi/0z9pwY0zce+DQm4nYEVPn8i2vPtML Fz4Y5RocvkleUleGBGERQ+Tq0yyaadA5DFekSK4KPlIPidrNmWtpDc/9I3c0zgaF3Sz+ 6Seg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=L9IjlYw3; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id h21-20020a056a00171500b004fa3a8dffffsi3145263pfc.182.2022.03.25.12.51.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 12:51:09 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=L9IjlYw3; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CD70E19BE4B; Fri, 25 Mar 2022 11:40:44 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378718AbiCYPff (ORCPT + 99 others); Fri, 25 Mar 2022 11:35:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34164 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376822AbiCYPX1 (ORCPT ); Fri, 25 Mar 2022 11:23:27 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CB7EE1247; Fri, 25 Mar 2022 08:16:50 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0D11C60DE3; Fri, 25 Mar 2022 15:16:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0F75DC340E9; Fri, 25 Mar 2022 15:16:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1648221409; bh=8SAhyuG4jGlA+wi+EXKjrX7dlF5Y3pT/GEqS0lcPxAM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L9IjlYw3W0l28TqXxJCl7XRnXwPhNaZTgt9JFUkZ2vaQ+yTAtzZKt+5jkJCQAtucE GRusRpJrUMHOaDVybkiSR+Eh2RrNQIId5jatdIWEPttOjKQ+TL1DQOQMT1q5PLOxJW LdnhGHAxHXzQpfwzQBhIFLvGDHfsHyD+UiUPVBlc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jarkko Sakkinen , Jason Gunthorpe , linux-integrity@vger.kernel.org, Tadeusz Struk , Tadeusz Struk Subject: [PATCH 5.16 14/37] tpm: Fix error handling in async work Date: Fri, 25 Mar 2022 16:14:24 +0100 Message-Id: <20220325150420.455042317@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220325150420.046488912@linuxfoundation.org> References: <20220325150420.046488912@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tadeusz Struk commit 2e8e4c8f6673247e22efc7985ce5497accd16f88 upstream. When an invalid (non existing) handle is used in a TPM command, that uses the resource manager interface (/dev/tpmrm0) the resource manager tries to load it from its internal cache, but fails and the tpm_dev_transmit returns an -EINVAL error to the caller. The existing async handler doesn't handle these error cases currently and the condition in the poll handler never returns mask with EPOLLIN set. The result is that the poll call blocks and the application gets stuck until the user_read_timer wakes it up after 120 sec. Change the tpm_dev_async_work function to handle error conditions returned from tpm_dev_transmit they are also reflected in the poll mask and a correct error code could passed back to the caller. Cc: Jarkko Sakkinen Cc: Jason Gunthorpe Cc: Cc: Cc: Fixes: 9e1b74a63f77 ("tpm: add support for nonblocking operation") Tested-by: Jarkko Sakkinen Signed-off-by: Tadeusz Struk Reviewed-by: Jarkko Sakkinen Signed-off-by: Jarkko Sakkinen Cc: Tadeusz Struk Signed-off-by: Greg Kroah-Hartman --- drivers/char/tpm/tpm-dev-common.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) --- a/drivers/char/tpm/tpm-dev-common.c +++ b/drivers/char/tpm/tpm-dev-common.c @@ -69,7 +69,13 @@ static void tpm_dev_async_work(struct wo ret = tpm_dev_transmit(priv->chip, priv->space, priv->data_buffer, sizeof(priv->data_buffer)); tpm_put_ops(priv->chip); - if (ret > 0) { + + /* + * If ret is > 0 then tpm_dev_transmit returned the size of the + * response. If ret is < 0 then tpm_dev_transmit failed and + * returned an error code. + */ + if (ret != 0) { priv->response_length = ret; mod_timer(&priv->user_read_timer, jiffies + (120 * HZ)); }