From nobody Sat Jun 20 19:58:39 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 69CD63A8FE6 for ; Fri, 10 Apr 2026 21:14:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775855653; cv=none; b=GDi6WDr7KmpbS3xRKsmiQEboxsdarUyszKylDa6LgkLrnKA9478v0myM0V1BelH6XPw6hpaS2dw5UcDbr7dcY1WqXKbWdVlzSu3hKR2/KmLW9thrwKE8VAwPXnfcwn6J0QUtJvUZwlCYeHppgOV9YHDguOBzZeBBrZ4L1i8vep8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775855653; c=relaxed/simple; bh=FYQDOltfrc3opjJ2E0nvh2wcU3TveNn38McFy/IMHa0=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=EIdxbCyFmOzvuHMdLZMlXX+cmS6CJbnZA15eJHThW1ogXwwXI28fZiRYBMzXPb8aUUcYl7ij/7CiYRGYFzInuEsHPYoJuS3WLssQ1A4syeQK3Wr3x2INmPJCz4aEOPvUEs7nJi5bc/nm4z9qtxU33mx5ag0BAnaeAmynGOGOxDo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--jacqwong.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=WUrEUSmq; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--jacqwong.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="WUrEUSmq" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2b0cf396c45so28924035ad.1 for ; Fri, 10 Apr 2026 14:14:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1775855651; x=1776460451; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=/bR4j11/2b2AFnB0wDJRBiDOFrgnvZtW0CRGmn1RLZY=; b=WUrEUSmqNWsMPbQ1ke9wVYZlkpm+NaYO1GTlXpRNK1lqT/9qvBWvKjwLkN1TGYFyiy W2d/lUlj6YEgfFLoz5xOhTPTijYB4d/KlLk1vrSeWH4GeFDgJGDRJMMBBumiG9VZk8lK kc9WFhpRRmxIe5l7WP4SISbKnaLtwPkrYRO6uGHBUAf3s10zc21I4Tb5XbUnU+g1bAjs 7VKNKGTvsKu1r7dWngQTSy1a+wotGMBBq2BnlxnGnMIVT7PA3Kl9g6AATDhoiRDCJgOT 3fKunQtogZRcqXmESns1w8bYe39NE1hY1F2d3tExggq9IT6wzTubEJq8x8WqTbYG6Ls0 Sq4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775855651; x=1776460451; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=/bR4j11/2b2AFnB0wDJRBiDOFrgnvZtW0CRGmn1RLZY=; b=KX77Yemqt3h8SdD7CEUUGzAsTM7rfkSCm9voslXrZxUuAl9zuDuI5uk/4gDx/cE+7F 7n2PN2hRYLnb9cY0gOrlb44wxy2LUUd0dQmbOvRAkwKRoaZr4Nvhc9gZKAoAXVG5c7n5 6DICebReVb6j65qGYd8qno39S6EEqCAQkabw2l4fxExCufYamRzafUEH4Y7JAIFNqGQw ohG0oNcvRGkMpWCdviJLBOxQDeKBuQZSqW/TAZmPxLwrlfR8Mc37QzN0gCJFsRlZ0zvD XpjIYbRaqWFNrMi16e6hTe7QRtOJXNmh5SBZjoXpCSFE7kMP1XdsxXb37B4M1LWtdKFK fGvg== X-Forwarded-Encrypted: i=1; AJvYcCWkoPBBskb2fwTHb4n7NL8Pk3fRDoL6VaezYbNdLvy3Uwae9TPD8haLqmUvBJUU2bd3BT5Hn+eFWFNMS6o=@vger.kernel.org X-Gm-Message-State: AOJu0Yxja4jw0abBb1qBP48RqFl3N0F5ncoXNG+cRBA7YFWLOjMnrNwS EukUm+WrHtX6qp5T5Ojiwr4N+yJLZFPmBBVhFzshDLZhippu2T8pyZ+R8cE2nlF8zoIPWHamtNB CAIub3Cl9RW2ZzQ== X-Received: from plbbj8.prod.google.com ([2002:a17:902:8508:b0:2b2:4d5c:3eec]) (user=jacqwong job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cf05:b0:2b0:afbe:4e14 with SMTP id d9443c01a7336-2b2d5a8eee1mr48142395ad.40.1775855650467; Fri, 10 Apr 2026 14:14:10 -0700 (PDT) Date: Fri, 10 Apr 2026 21:13:50 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.53.0.1213.gd9a14994de-goog Message-ID: <20260410211350.1132611-1-jacqwong@google.com> Subject: [PATCH] tpm_tis: Check for an error after exhausting send retires From: Jacqueline Wong To: peterhuewe@gmx.de, jarkko@kernel.org Cc: jgg@ziepe.ca, Alexander.Steffen@infineon.com, linux-integrity@vger.kernel.org, linux-kernel@vger.kernel.org, axelrasmussen@google.com, Jordan Hand Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jordan Hand tpm_tis_send_main() will attempt to retry sending data TPM_RETRY times. Currently, if those retries are exhausted, the driver will attempt to call execute. The TPM will be in the wrong state, leading to the operation simply timing out. Instead, if there is still an error after retries are exhausted, return that error immediately. Additionally, add logging to more easily determine reason for transmit failure. Fixes: 280db21e153d8 ("tpm_tis: Resend command to recover from data transfe= r errors") Signed-off-by: Jordan Hand Reviewed-by: Jarkko Sakkinen Reviewed-by: Paul Menzel --- drivers/char/tpm/tpm_tis_core.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_cor= e.c index e2a1769081b1..b78937841879 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -471,6 +471,8 @@ static int tpm_tis_send_data(struct tpm_chip *chip, con= st u8 *buf, size_t len) status =3D tpm_tis_status(chip); if (!itpm && (status & TPM_STS_DATA_EXPECT) =3D=3D 0) { rc =3D -EIO; + dev_err(&chip->dev, "TPM_STS_DATA_EXPECT should be set. sts =3D 0x%08x\= n", + status); goto out_err; } } @@ -491,6 +493,8 @@ static int tpm_tis_send_data(struct tpm_chip *chip, con= st u8 *buf, size_t len) status =3D tpm_tis_status(chip); if (!itpm && (status & TPM_STS_DATA_EXPECT) !=3D 0) { rc =3D -EIO; + dev_err(&chip->dev, "TPM_STS_DATA_EXPECT should be unset. sts =3D 0x%08x= \n", + status); goto out_err; } =20 @@ -552,11 +556,16 @@ static int tpm_tis_send_main(struct tpm_chip *chip, c= onst u8 *buf, size_t len) break; else if (rc !=3D -EAGAIN && rc !=3D -EIO) /* Data transfer failed, not recoverable */ - return rc; + goto out_err; =20 usleep_range(priv->timeout_min, priv->timeout_max); } =20 + if (rc =3D=3D -EAGAIN || rc =3D=3D -EIO) { + dev_err(&chip->dev, "Exhausted tpm_tis_send_data retries\n"); + goto out_err; + } + /* go and do it */ rc =3D tpm_tis_write8(priv, TPM_STS(priv->locality), TPM_STS_GO); if (rc < 0) --=20 2.53.0.1213.gd9a14994de-goog