From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [jarkko-tpmdd:hibernate 27/39] drivers/char/tpm/tpm2-ak.c:338 tpm2_get_signed_audit_digest() warn: was && intended here instead of ||?
Date: Tue, 10 Nov 2026 07:00:42 +0100 [thread overview]
Message-ID: <202611100627.IZHiPvAH-lkp@intel.com> (raw)
Unfiltered warning: this smatch report is sent as-is and has not been
reviewed for false positives, so please treat it with due skepticism.
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Jarkko Sakkinen <jarkko@kernel.org>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd.git hibernate
head: 74bb07bc3885849d08ac7ab1942479559faa986c
commit: dc018c1685625cb501c0543eae3fcac57e9c0be6 [27/39] tpm: Add a kernel attestation key and signed audit digest retrieval
:::::: branch date: 6 hours ago
:::::: commit date: 6 hours ago
config: parisc-randconfig-2200-20261110 (https://download.01.org/0day-ci/archive/20261110/202611100627.IZHiPvAH-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 15.3.0
smatch: v0.5.0-9187-g5189e3fb
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202611100627.IZHiPvAH-lkp@intel.com/
New smatch warnings:
drivers/char/tpm/tpm2-ak.c:338 tpm2_get_signed_audit_digest() warn: was && intended here instead of ||?
Old smatch warnings:
drivers/char/tpm/tpm2-ak.c:111 tpm2_parse_kernel_ak_public() warn: was && intended here instead of ||?
vim +338 drivers/char/tpm/tpm2-ak.c
dc018c1685625c Matthew Garrett 2026-10-08 241
dc018c1685625c Matthew Garrett 2026-10-08 242 /**
dc018c1685625c Matthew Garrett 2026-10-08 243 * tpm2_get_signed_audit_digest() - get the audit session digest signed by the AK
dc018c1685625c Matthew Garrett 2026-10-08 244 * @chip: the TPM chip
dc018c1685625c Matthew Garrett 2026-10-08 245 * @nonce: qualifying data to include in the attestation (may be NULL)
dc018c1685625c Matthew Garrett 2026-10-08 246 * @nonce_len: length of @nonce
dc018c1685625c Matthew Garrett 2026-10-08 247 * @audit: filled with the signed attestation and the AK public key
dc018c1685625c Matthew Garrett 2026-10-08 248 *
dc018c1685625c Matthew Garrett 2026-10-08 249 * Creates the kernel AK and uses TPM2_GetSessionAuditDigest to have it
dc018c1685625c Matthew Garrett 2026-10-08 250 * sign the digest of the active audit session. The session itself is not
dc018c1685625c Matthew Garrett 2026-10-08 251 * used to authorize the command, so the audit digest and the log returned
dc018c1685625c Matthew Garrett 2026-10-08 252 * by tpm2_get_audit_log() are unaffected. The endorsement and owner
dc018c1685625c Matthew Garrett 2026-10-08 253 * hierarchies must have empty auth values. The caller must hold the
dc018c1685625c Matthew Garrett 2026-10-08 254 * chip's ops lock and must release @audit with tpm2_free_signed_audit().
dc018c1685625c Matthew Garrett 2026-10-08 255 *
dc018c1685625c Matthew Garrett 2026-10-08 256 * Return:
dc018c1685625c Matthew Garrett 2026-10-08 257 * * 0 - OK
dc018c1685625c Matthew Garrett 2026-10-08 258 * * -EINVAL - No audit session is active, or the response was malformed
dc018c1685625c Matthew Garrett 2026-10-08 259 * * -errno - A system error
dc018c1685625c Matthew Garrett 2026-10-08 260 * * TPM_RC - A TPM error
dc018c1685625c Matthew Garrett 2026-10-08 261 */
dc018c1685625c Matthew Garrett 2026-10-08 262 int tpm2_get_signed_audit_digest(struct tpm_chip *chip, const u8 *nonce,
dc018c1685625c Matthew Garrett 2026-10-08 263 u16 nonce_len,
dc018c1685625c Matthew Garrett 2026-10-08 264 struct tpm2_signed_audit *audit)
dc018c1685625c Matthew Garrett 2026-10-08 265 {
dc018c1685625c Matthew Garrett 2026-10-08 266 struct tpm_buf *buf __free(kfree) = NULL;
dc018c1685625c Matthew Garrett 2026-10-08 267 u32 session, ak, param_size, end;
dc018c1685625c Matthew Garrett 2026-10-08 268 const u8 *attest;
dc018c1685625c Matthew Garrett 2026-10-08 269 struct tpm2_rsp r;
dc018c1685625c Matthew Garrett 2026-10-08 270 u16 attest_len;
dc018c1685625c Matthew Garrett 2026-10-08 271 int rc;
dc018c1685625c Matthew Garrett 2026-10-08 272
dc018c1685625c Matthew Garrett 2026-10-08 273 memset(audit, 0, sizeof(*audit));
dc018c1685625c Matthew Garrett 2026-10-08 274
dc018c1685625c Matthew Garrett 2026-10-08 275 if (nonce_len > TPM2_MAX_DIGEST_SIZE)
dc018c1685625c Matthew Garrett 2026-10-08 276 return -EINVAL;
dc018c1685625c Matthew Garrett 2026-10-08 277
dc018c1685625c Matthew Garrett 2026-10-08 278 rc = tpm2_audit_session_handle(chip, &session);
dc018c1685625c Matthew Garrett 2026-10-08 279 if (rc)
dc018c1685625c Matthew Garrett 2026-10-08 280 return rc;
dc018c1685625c Matthew Garrett 2026-10-08 281
dc018c1685625c Matthew Garrett 2026-10-08 282 buf = kzalloc(TPM_BUFSIZE, GFP_KERNEL);
dc018c1685625c Matthew Garrett 2026-10-08 283 if (!buf)
dc018c1685625c Matthew Garrett 2026-10-08 284 return -ENOMEM;
dc018c1685625c Matthew Garrett 2026-10-08 285
dc018c1685625c Matthew Garrett 2026-10-08 286 rc = tpm2_create_kernel_ak(chip, &ak, audit->ak_x, audit->ak_y);
dc018c1685625c Matthew Garrett 2026-10-08 287 if (rc)
dc018c1685625c Matthew Garrett 2026-10-08 288 return rc;
dc018c1685625c Matthew Garrett 2026-10-08 289
dc018c1685625c Matthew Garrett 2026-10-08 290 tpm_buf_init(buf, TPM_BUFSIZE);
dc018c1685625c Matthew Garrett 2026-10-08 291 tpm_buf_reset(buf, TPM2_ST_SESSIONS, TPM2_CC_GET_SESSION_AUDIT_DIGEST);
dc018c1685625c Matthew Garrett 2026-10-08 292
dc018c1685625c Matthew Garrett 2026-10-08 293 /* privacyAdminHandle, signHandle, sessionHandle */
dc018c1685625c Matthew Garrett 2026-10-08 294 tpm_buf_append_handle(buf, TPM2_RH_ENDORSEMENT);
dc018c1685625c Matthew Garrett 2026-10-08 295 tpm_buf_append_handle(buf, ak);
dc018c1685625c Matthew Garrett 2026-10-08 296 tpm_buf_append_handle(buf, session);
dc018c1685625c Matthew Garrett 2026-10-08 297
dc018c1685625c Matthew Garrett 2026-10-08 298 /* empty password authorizations for the endorsement hierarchy and AK */
dc018c1685625c Matthew Garrett 2026-10-08 299 tpm_buf_append_auth(chip, buf, NULL, 0);
dc018c1685625c Matthew Garrett 2026-10-08 300 tpm_buf_append_auth(chip, buf, NULL, 0);
dc018c1685625c Matthew Garrett 2026-10-08 301
dc018c1685625c Matthew Garrett 2026-10-08 302 /* qualifyingData */
dc018c1685625c Matthew Garrett 2026-10-08 303 tpm_buf_append_u16(buf, nonce_len);
dc018c1685625c Matthew Garrett 2026-10-08 304 if (nonce_len)
dc018c1685625c Matthew Garrett 2026-10-08 305 tpm_buf_append(buf, nonce, nonce_len);
dc018c1685625c Matthew Garrett 2026-10-08 306
dc018c1685625c Matthew Garrett 2026-10-08 307 /* inScheme: use the AK's scheme */
dc018c1685625c Matthew Garrett 2026-10-08 308 tpm_buf_append_u16(buf, TPM_ALG_NULL);
dc018c1685625c Matthew Garrett 2026-10-08 309
dc018c1685625c Matthew Garrett 2026-10-08 310 if (buf->flags & TPM_BUF_INVALID) {
dc018c1685625c Matthew Garrett 2026-10-08 311 rc = -EINVAL;
dc018c1685625c Matthew Garrett 2026-10-08 312 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 313 }
dc018c1685625c Matthew Garrett 2026-10-08 314
dc018c1685625c Matthew Garrett 2026-10-08 315 rc = tpm_transmit_cmd(chip, buf, 0, "getting session audit digest");
dc018c1685625c Matthew Garrett 2026-10-08 316 if (rc)
dc018c1685625c Matthew Garrett 2026-10-08 317 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 318
dc018c1685625c Matthew Garrett 2026-10-08 319 rc = -EINVAL;
dc018c1685625c Matthew Garrett 2026-10-08 320 tpm2_rsp_init(&r, buf);
dc018c1685625c Matthew Garrett 2026-10-08 321 param_size = tpm2_rsp_u32(&r);
dc018c1685625c Matthew Garrett 2026-10-08 322 end = r.off + param_size;
dc018c1685625c Matthew Garrett 2026-10-08 323
dc018c1685625c Matthew Garrett 2026-10-08 324 /* auditInfo */
dc018c1685625c Matthew Garrett 2026-10-08 325 attest_len = tpm2_rsp_u16(&r);
dc018c1685625c Matthew Garrett 2026-10-08 326 attest = tpm2_rsp_bytes(&r, attest_len);
dc018c1685625c Matthew Garrett 2026-10-08 327 if (!attest)
dc018c1685625c Matthew Garrett 2026-10-08 328 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 329
dc018c1685625c Matthew Garrett 2026-10-08 330 /* TPMS_ATTEST begins with magic and type */
dc018c1685625c Matthew Garrett 2026-10-08 331 if (attest_len < sizeof(u32) + sizeof(u16) ||
dc018c1685625c Matthew Garrett 2026-10-08 332 get_unaligned_be32(attest) != TPM2_GENERATED_VALUE ||
dc018c1685625c Matthew Garrett 2026-10-08 333 get_unaligned_be16(attest + sizeof(u32)) !=
dc018c1685625c Matthew Garrett 2026-10-08 334 TPM2_ST_ATTEST_SESSION_AUDIT)
dc018c1685625c Matthew Garrett 2026-10-08 335 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 336
dc018c1685625c Matthew Garrett 2026-10-08 337 /* signature */
dc018c1685625c Matthew Garrett 2026-10-08 @338 if (tpm2_rsp_u16(&r) != TPM_ALG_ECDSA ||
dc018c1685625c Matthew Garrett 2026-10-08 339 tpm2_rsp_u16(&r) != TPM_ALG_SHA256)
dc018c1685625c Matthew Garrett 2026-10-08 340 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 341 tpm2_rsp_ecc_param(&r, audit->sig_r);
dc018c1685625c Matthew Garrett 2026-10-08 342 tpm2_rsp_ecc_param(&r, audit->sig_s);
dc018c1685625c Matthew Garrett 2026-10-08 343
dc018c1685625c Matthew Garrett 2026-10-08 344 if (r.err || r.off != end)
dc018c1685625c Matthew Garrett 2026-10-08 345 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 346
dc018c1685625c Matthew Garrett 2026-10-08 347 audit->attest = kmemdup(attest, attest_len, GFP_KERNEL);
dc018c1685625c Matthew Garrett 2026-10-08 348 if (!audit->attest) {
dc018c1685625c Matthew Garrett 2026-10-08 349 rc = -ENOMEM;
dc018c1685625c Matthew Garrett 2026-10-08 350 goto out;
dc018c1685625c Matthew Garrett 2026-10-08 351 }
dc018c1685625c Matthew Garrett 2026-10-08 352 audit->attest_len = attest_len;
dc018c1685625c Matthew Garrett 2026-10-08 353 rc = 0;
dc018c1685625c Matthew Garrett 2026-10-08 354
dc018c1685625c Matthew Garrett 2026-10-08 355 out:
dc018c1685625c Matthew Garrett 2026-10-08 356 if (rc < 0 && rc != -ENOMEM)
dc018c1685625c Matthew Garrett 2026-10-08 357 dev_err(&chip->dev, "failed to get session audit digest: %d\n",
dc018c1685625c Matthew Garrett 2026-10-08 358 rc);
dc018c1685625c Matthew Garrett 2026-10-08 359 tpm2_flush_context(chip, ak);
dc018c1685625c Matthew Garrett 2026-10-08 360 return rc;
dc018c1685625c Matthew Garrett 2026-10-08 361 }
dc018c1685625c Matthew Garrett 2026-10-08 362 EXPORT_SYMBOL_GPL(tpm2_get_signed_audit_digest);
dc018c1685625c Matthew Garrett 2026-10-08 363
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2026-11-10 6:00 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202611100627.IZHiPvAH-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.