Linux Audio

Check our new training course

Loading...
v6.8
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * Copyright (C) 2004 IBM Corporation
  4 * Copyright (C) 2014 Intel Corporation
  5 *
  6 * Authors:
  7 * Leendert van Doorn <leendert@watson.ibm.com>
  8 * Dave Safford <safford@watson.ibm.com>
  9 * Reiner Sailer <sailer@watson.ibm.com>
 10 * Kylene Hall <kjhall@us.ibm.com>
 11 *
 12 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
 13 *
 14 * Device driver for TCG/TCPA TPM (trusted platform module).
 15 * Specifications at www.trustedcomputinggroup.org
 16 *
 
 
 
 
 
 17 * Note, the TPM chip is not interrupt driven (only polling)
 18 * and can have very long timeouts (minutes!). Hence the unusual
 19 * calls to msleep.
 
 20 */
 21
 22#include <linux/poll.h>
 23#include <linux/slab.h>
 24#include <linux/mutex.h>
 25#include <linux/spinlock.h>
 26#include <linux/suspend.h>
 27#include <linux/freezer.h>
 
 28#include <linux/tpm_eventlog.h>
 29
 30#include "tpm.h"
 31
 
 
 
 
 
 32/*
 33 * Bug workaround - some TPM's don't flush the most
 34 * recently changed pcr on suspend, so force the flush
 35 * with an extend to the selected _unused_ non-volatile pcr.
 36 */
 37static u32 tpm_suspend_pcr;
 38module_param_named(suspend_pcr, tpm_suspend_pcr, uint, 0644);
 39MODULE_PARM_DESC(suspend_pcr,
 40		 "PCR to use for dummy writes to facilitate flush on suspend.");
 41
 42/**
 43 * tpm_calc_ordinal_duration() - calculate the maximum command duration
 44 * @chip:    TPM chip to use.
 45 * @ordinal: TPM command ordinal.
 46 *
 47 * The function returns the maximum amount of time the chip could take
 48 * to return the result for a particular ordinal in jiffies.
 49 *
 50 * Return: A maximal duration time for an ordinal in jiffies.
 51 */
 52unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 53{
 54	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 55		return tpm2_calc_ordinal_duration(chip, ordinal);
 
 
 
 
 
 
 
 
 
 
 
 
 56	else
 57		return tpm1_calc_ordinal_duration(chip, ordinal);
 58}
 59EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
 60
 61static ssize_t tpm_try_transmit(struct tpm_chip *chip, void *buf, size_t bufsiz)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 62{
 63	struct tpm_header *header = buf;
 64	int rc;
 65	ssize_t len = 0;
 66	u32 count, ordinal;
 67	unsigned long stop;
 
 68
 69	if (bufsiz < TPM_HEADER_SIZE)
 70		return -EINVAL;
 
 
 
 
 
 
 
 
 
 
 
 
 71
 72	if (bufsiz > TPM_BUFSIZE)
 73		bufsiz = TPM_BUFSIZE;
 74
 75	count = be32_to_cpu(header->length);
 76	ordinal = be32_to_cpu(header->ordinal);
 77	if (count == 0)
 78		return -ENODATA;
 79	if (count > bufsiz) {
 80		dev_err(&chip->dev,
 81			"invalid count value %x %zx\n", count, bufsiz);
 82		return -E2BIG;
 83	}
 84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 85	rc = chip->ops->send(chip, buf, count);
 86	if (rc < 0) {
 87		if (rc != -EPIPE)
 88			dev_err(&chip->dev,
 89				"%s: send(): error %d\n", __func__, rc);
 90		return rc;
 91	}
 92
 93	/* A sanity check. send() should just return zero on success e.g.
 94	 * not the command length.
 95	 */
 96	if (rc > 0) {
 97		dev_warn(&chip->dev,
 98			 "%s: send(): invalid value %d\n", __func__, rc);
 99		rc = 0;
100	}
101
102	if (chip->flags & TPM_CHIP_FLAG_IRQ)
103		goto out_recv;
104
105	stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal);
 
 
 
106	do {
107		u8 status = chip->ops->status(chip);
108		if ((status & chip->ops->req_complete_mask) ==
109		    chip->ops->req_complete_val)
110			goto out_recv;
111
112		if (chip->ops->req_canceled(chip, status)) {
113			dev_err(&chip->dev, "Operation Canceled\n");
114			return -ECANCELED;
 
115		}
116
117		tpm_msleep(TPM_TIMEOUT_POLL);
118		rmb();
119	} while (time_before(jiffies, stop));
120
121	chip->ops->cancel(chip);
122	dev_err(&chip->dev, "Operation Timed out\n");
123	return -ETIME;
 
124
125out_recv:
126	len = chip->ops->recv(chip, buf, bufsiz);
127	if (len < 0) {
128		rc = len;
129		dev_err(&chip->dev, "tpm_transmit: tpm_recv: error %d\n", rc);
130	} else if (len < TPM_HEADER_SIZE || len != be32_to_cpu(header->length))
 
 
131		rc = -EFAULT;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
 
 
 
 
 
133	return rc ? rc : len;
134}
135
136/**
137 * tpm_transmit - Internal kernel interface to transmit TPM commands.
138 * @chip:	a TPM chip to use
139 * @buf:	a TPM command buffer
140 * @bufsiz:	length of the TPM command buffer
141 *
142 * A wrapper around tpm_try_transmit() that handles TPM2_RC_RETRY returns from
143 * the TPM and retransmits the command after a delay up to a maximum wait of
144 * TPM2_DURATION_LONG.
145 *
146 * Note that TPM 1.x never returns TPM2_RC_RETRY so the retry logic is TPM 2.0
147 * only.
 
 
 
 
 
 
 
 
 
 
148 *
149 * Return:
150 * * The response length	- OK
151 * * -errno			- A system error
152 */
153ssize_t tpm_transmit(struct tpm_chip *chip, u8 *buf, size_t bufsiz)
 
154{
155	struct tpm_header *header = (struct tpm_header *)buf;
156	/* space for header and handles */
157	u8 save[TPM_HEADER_SIZE + 3*sizeof(u32)];
158	unsigned int delay_msec = TPM2_DURATION_SHORT;
159	u32 rc = 0;
160	ssize_t ret;
161	const size_t save_size = min(sizeof(save), bufsiz);
 
162	/* the command code is where the return code will be */
163	u32 cc = be32_to_cpu(header->return_code);
164
165	/*
166	 * Subtlety here: if we have a space, the handles will be
167	 * transformed, so when we restore the header we also have to
168	 * restore the handles.
169	 */
170	memcpy(save, buf, save_size);
171
172	for (;;) {
173		ret = tpm_try_transmit(chip, buf, bufsiz);
174		if (ret < 0)
175			break;
176		rc = be32_to_cpu(header->return_code);
177		if (rc != TPM2_RC_RETRY && rc != TPM2_RC_TESTING)
178			break;
179		/*
180		 * return immediately if self test returns test
181		 * still running to shorten boot time.
182		 */
183		if (rc == TPM2_RC_TESTING && cc == TPM2_CC_SELF_TEST)
184			break;
185
186		if (delay_msec > TPM2_DURATION_LONG) {
187			if (rc == TPM2_RC_RETRY)
188				dev_err(&chip->dev, "in retry loop\n");
189			else
190				dev_err(&chip->dev,
191					"self test is still running\n");
192			break;
193		}
194		tpm_msleep(delay_msec);
195		delay_msec *= 2;
196		memcpy(buf, save, save_size);
197	}
198	return ret;
199}
200
201/**
202 * tpm_transmit_cmd - send a tpm command to the device
203 * @chip:			a TPM chip to use
204 * @buf:			a TPM command buffer
205 * @min_rsp_body_length:	minimum expected length of response body
206 * @desc:			command description used in the error message
 
 
 
 
 
207 *
208 * Return:
209 * * 0		- OK
210 * * -errno	- A system error
211 * * TPM_RC	- A TPM error
212 */
213ssize_t tpm_transmit_cmd(struct tpm_chip *chip, struct tpm_buf *buf,
214			 size_t min_rsp_body_length, const char *desc)
 
 
215{
216	const struct tpm_header *header = (struct tpm_header *)buf->data;
217	int err;
218	ssize_t len;
219
220	len = tpm_transmit(chip, buf->data, PAGE_SIZE);
221	if (len <  0)
222		return len;
223
224	err = be32_to_cpu(header->return_code);
225	if (err != 0 && err != TPM_ERR_DISABLED && err != TPM_ERR_DEACTIVATED
226	    && err != TPM2_RC_TESTING && desc)
227		dev_err(&chip->dev, "A TPM error (%d) occurred %s\n", err,
228			desc);
229	if (err)
230		return err;
231
232	if (len < min_rsp_body_length + TPM_HEADER_SIZE)
233		return -EFAULT;
234
235	return 0;
236}
237EXPORT_SYMBOL_GPL(tpm_transmit_cmd);
238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239int tpm_get_timeouts(struct tpm_chip *chip)
240{
 
 
 
 
241	if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS)
242		return 0;
243
244	if (chip->flags & TPM_CHIP_FLAG_TPM2)
245		return tpm2_get_timeouts(chip);
246	else
247		return tpm1_get_timeouts(chip);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248}
249EXPORT_SYMBOL_GPL(tpm_get_timeouts);
250
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251/**
252 * tpm_is_tpm2 - do we a have a TPM2 chip?
253 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
254 *
255 * Return:
256 * 1 if we have a TPM2 chip.
257 * 0 if we don't have a TPM2 chip.
258 * A negative number for system errors (errno).
259 */
260int tpm_is_tpm2(struct tpm_chip *chip)
261{
262	int rc;
263
264	chip = tpm_find_get_ops(chip);
265	if (!chip)
266		return -ENODEV;
267
268	rc = (chip->flags & TPM_CHIP_FLAG_TPM2) != 0;
269
270	tpm_put_ops(chip);
271
272	return rc;
273}
274EXPORT_SYMBOL_GPL(tpm_is_tpm2);
275
276/**
277 * tpm_pcr_read - read a PCR value from SHA1 bank
278 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
279 * @pcr_idx:	the PCR to be retrieved
280 * @digest:	the PCR bank and buffer current PCR value is written to
281 *
282 * Return: same as with tpm_transmit_cmd()
283 */
284int tpm_pcr_read(struct tpm_chip *chip, u32 pcr_idx,
285		 struct tpm_digest *digest)
286{
287	int rc;
288
289	chip = tpm_find_get_ops(chip);
290	if (!chip)
291		return -ENODEV;
292
293	if (chip->flags & TPM_CHIP_FLAG_TPM2)
294		rc = tpm2_pcr_read(chip, pcr_idx, digest, NULL);
295	else
296		rc = tpm1_pcr_read(chip, pcr_idx, digest->digest);
297
298	tpm_put_ops(chip);
299	return rc;
300}
301EXPORT_SYMBOL_GPL(tpm_pcr_read);
302
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
303/**
304 * tpm_pcr_extend - extend a PCR value in SHA1 bank.
305 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
306 * @pcr_idx:	the PCR to be retrieved
307 * @digests:	array of tpm_digest structures used to extend PCRs
308 *
309 * Note: callers must pass a digest for every allocated PCR bank, in the same
310 * order of the banks in chip->allocated_banks.
 
311 *
312 * Return: same as with tpm_transmit_cmd()
313 */
314int tpm_pcr_extend(struct tpm_chip *chip, u32 pcr_idx,
315		   struct tpm_digest *digests)
316{
317	int rc;
 
 
318	int i;
319
320	chip = tpm_find_get_ops(chip);
321	if (!chip)
322		return -ENODEV;
323
324	for (i = 0; i < chip->nr_allocated_banks; i++) {
325		if (digests[i].alg_id != chip->allocated_banks[i].alg_id) {
326			rc = -EINVAL;
327			goto out;
 
 
 
 
328		}
329	}
330
331	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
332		rc = tpm2_pcr_extend(chip, pcr_idx, digests);
333		goto out;
334	}
335
336	rc = tpm1_pcr_extend(chip, pcr_idx, digests[0].digest,
337			     "attempting extend a PCR value");
338
339out:
340	tpm_put_ops(chip);
341	return rc;
342}
343EXPORT_SYMBOL_GPL(tpm_pcr_extend);
344
345/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346 * tpm_send - send a TPM command
347 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
348 * @cmd:	a TPM command buffer
349 * @buflen:	the length of the TPM command buffer
350 *
351 * Return: same as with tpm_transmit_cmd()
352 */
353int tpm_send(struct tpm_chip *chip, void *cmd, size_t buflen)
354{
355	struct tpm_buf buf;
356	int rc;
357
358	chip = tpm_find_get_ops(chip);
359	if (!chip)
360		return -ENODEV;
361
362	buf.data = cmd;
363	rc = tpm_transmit_cmd(chip, &buf, 0, "attempting to a send a command");
364
365	tpm_put_ops(chip);
366	return rc;
367}
368EXPORT_SYMBOL_GPL(tpm_send);
369
370int tpm_auto_startup(struct tpm_chip *chip)
371{
372	int rc;
373
374	if (!(chip->ops->flags & TPM_OPS_AUTO_STARTUP))
375		return 0;
376
377	if (chip->flags & TPM_CHIP_FLAG_TPM2)
378		rc = tpm2_auto_startup(chip);
379	else
380		rc = tpm1_auto_startup(chip);
381
382	return rc;
383}
384
385/*
386 * We are about to suspend. Save the TPM state
387 * so that it can be restored.
388 */
389int tpm_pm_suspend(struct device *dev)
390{
391	struct tpm_chip *chip = dev_get_drvdata(dev);
392	int rc = 0;
 
393
394	if (!chip)
 
 
395		return -ENODEV;
396
397	if (chip->flags & TPM_CHIP_FLAG_ALWAYS_POWERED)
398		goto suspended;
399
400	if ((chip->flags & TPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED) &&
401	    !pm_suspend_via_firmware())
402		goto suspended;
403
404	rc = tpm_try_get_ops(chip);
405	if (!rc) {
406		if (chip->flags & TPM_CHIP_FLAG_TPM2)
407			tpm2_shutdown(chip, TPM2_SU_STATE);
408		else
409			rc = tpm1_pm_suspend(chip, tpm_suspend_pcr);
410
411		tpm_put_ops(chip);
 
 
412	}
413
414suspended:
415	chip->flags |= TPM_CHIP_FLAG_SUSPENDED;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
416
417	if (rc)
418		dev_err(dev, "Ignoring error %d while suspending\n", rc);
419	return 0;
 
 
 
 
 
420}
421EXPORT_SYMBOL_GPL(tpm_pm_suspend);
422
423/*
424 * Resume from a power safe. The BIOS already restored
425 * the TPM state.
426 */
427int tpm_pm_resume(struct device *dev)
428{
429	struct tpm_chip *chip = dev_get_drvdata(dev);
430
431	if (chip == NULL)
432		return -ENODEV;
433
434	chip->flags &= ~TPM_CHIP_FLAG_SUSPENDED;
435
436	/*
437	 * Guarantee that SUSPENDED is written last, so that hwrng does not
438	 * activate before the chip has been fully resumed.
439	 */
440	wmb();
441
442	return 0;
443}
444EXPORT_SYMBOL_GPL(tpm_pm_resume);
445
 
 
 
 
 
 
 
446/**
447 * tpm_get_random() - get random bytes from the TPM's RNG
448 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
449 * @out:	destination buffer for the random bytes
450 * @max:	the max number of bytes to write to @out
451 *
452 * Return: number of random bytes read or a negative error value.
453 */
454int tpm_get_random(struct tpm_chip *chip, u8 *out, size_t max)
455{
456	int rc;
 
 
 
457
458	if (!out || max > TPM_MAX_RNG_DATA)
459		return -EINVAL;
460
461	chip = tpm_find_get_ops(chip);
462	if (!chip)
463		return -ENODEV;
464
465	if (chip->flags & TPM_CHIP_FLAG_TPM2)
466		rc = tpm2_get_random(chip, out, max);
467	else
468		rc = tpm1_get_random(chip, out, max);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
470	tpm_put_ops(chip);
471	return rc;
472}
473EXPORT_SYMBOL_GPL(tpm_get_random);
474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475static int __init tpm_init(void)
476{
477	int rc;
478
479	rc = class_register(&tpm_class);
480	if (rc) {
481		pr_err("couldn't create tpm class\n");
482		return rc;
483	}
484
485	rc = class_register(&tpmrm_class);
486	if (rc) {
487		pr_err("couldn't create tpmrm class\n");
488		goto out_destroy_tpm_class;
 
489	}
490
491	rc = alloc_chrdev_region(&tpm_devt, 0, 2*TPM_NUM_DEVICES, "tpm");
492	if (rc < 0) {
493		pr_err("tpm: failed to allocate char dev region\n");
494		goto out_destroy_tpmrm_class;
495	}
496
497	rc = tpm_dev_common_init();
498	if (rc) {
499		pr_err("tpm: failed to allocate char dev region\n");
500		goto out_unreg_chrdev;
501	}
502
503	return 0;
504
505out_unreg_chrdev:
506	unregister_chrdev_region(tpm_devt, 2 * TPM_NUM_DEVICES);
507out_destroy_tpmrm_class:
508	class_unregister(&tpmrm_class);
509out_destroy_tpm_class:
510	class_unregister(&tpm_class);
511
512	return rc;
513}
514
515static void __exit tpm_exit(void)
516{
517	idr_destroy(&dev_nums_idr);
518	class_unregister(&tpm_class);
519	class_unregister(&tpmrm_class);
520	unregister_chrdev_region(tpm_devt, 2*TPM_NUM_DEVICES);
521	tpm_dev_common_exit();
522}
523
524subsys_initcall(tpm_init);
525module_exit(tpm_exit);
526
527MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
528MODULE_DESCRIPTION("TPM Driver");
529MODULE_VERSION("2.0");
530MODULE_LICENSE("GPL");
v4.17
 
   1/*
   2 * Copyright (C) 2004 IBM Corporation
   3 * Copyright (C) 2014 Intel Corporation
   4 *
   5 * Authors:
   6 * Leendert van Doorn <leendert@watson.ibm.com>
   7 * Dave Safford <safford@watson.ibm.com>
   8 * Reiner Sailer <sailer@watson.ibm.com>
   9 * Kylene Hall <kjhall@us.ibm.com>
  10 *
  11 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
  12 *
  13 * Device driver for TCG/TCPA TPM (trusted platform module).
  14 * Specifications at www.trustedcomputinggroup.org
  15 *
  16 * This program is free software; you can redistribute it and/or
  17 * modify it under the terms of the GNU General Public License as
  18 * published by the Free Software Foundation, version 2 of the
  19 * License.
  20 *
  21 * Note, the TPM chip is not interrupt driven (only polling)
  22 * and can have very long timeouts (minutes!). Hence the unusual
  23 * calls to msleep.
  24 *
  25 */
  26
  27#include <linux/poll.h>
  28#include <linux/slab.h>
  29#include <linux/mutex.h>
  30#include <linux/spinlock.h>
 
  31#include <linux/freezer.h>
  32#include <linux/pm_runtime.h>
  33#include <linux/tpm_eventlog.h>
  34
  35#include "tpm.h"
  36
  37#define TPM_MAX_ORDINAL 243
  38#define TSC_MAX_ORDINAL 12
  39#define TPM_PROTECTED_COMMAND 0x00
  40#define TPM_CONNECTION_COMMAND 0x40
  41
  42/*
  43 * Bug workaround - some TPM's don't flush the most
  44 * recently changed pcr on suspend, so force the flush
  45 * with an extend to the selected _unused_ non-volatile pcr.
  46 */
  47static int tpm_suspend_pcr;
  48module_param_named(suspend_pcr, tpm_suspend_pcr, uint, 0644);
  49MODULE_PARM_DESC(suspend_pcr,
  50		 "PCR to use for dummy writes to facilitate flush on suspend.");
  51
  52/*
  53 * Array with one entry per ordinal defining the maximum amount
  54 * of time the chip could take to return the result.  The ordinal
  55 * designation of short, medium or long is defined in a table in
  56 * TCG Specification TPM Main Part 2 TPM Structures Section 17. The
  57 * values of the SHORT, MEDIUM, and LONG durations are retrieved
  58 * from the chip during initialization with a call to tpm_get_timeouts.
 
 
  59 */
  60static const u8 tpm_ordinal_duration[TPM_MAX_ORDINAL] = {
  61	TPM_UNDEFINED,		/* 0 */
  62	TPM_UNDEFINED,
  63	TPM_UNDEFINED,
  64	TPM_UNDEFINED,
  65	TPM_UNDEFINED,
  66	TPM_UNDEFINED,		/* 5 */
  67	TPM_UNDEFINED,
  68	TPM_UNDEFINED,
  69	TPM_UNDEFINED,
  70	TPM_UNDEFINED,
  71	TPM_SHORT,		/* 10 */
  72	TPM_SHORT,
  73	TPM_MEDIUM,
  74	TPM_LONG,
  75	TPM_LONG,
  76	TPM_MEDIUM,		/* 15 */
  77	TPM_SHORT,
  78	TPM_SHORT,
  79	TPM_MEDIUM,
  80	TPM_LONG,
  81	TPM_SHORT,		/* 20 */
  82	TPM_SHORT,
  83	TPM_MEDIUM,
  84	TPM_MEDIUM,
  85	TPM_MEDIUM,
  86	TPM_SHORT,		/* 25 */
  87	TPM_SHORT,
  88	TPM_MEDIUM,
  89	TPM_SHORT,
  90	TPM_SHORT,
  91	TPM_MEDIUM,		/* 30 */
  92	TPM_LONG,
  93	TPM_MEDIUM,
  94	TPM_SHORT,
  95	TPM_SHORT,
  96	TPM_SHORT,		/* 35 */
  97	TPM_MEDIUM,
  98	TPM_MEDIUM,
  99	TPM_UNDEFINED,
 100	TPM_UNDEFINED,
 101	TPM_MEDIUM,		/* 40 */
 102	TPM_LONG,
 103	TPM_MEDIUM,
 104	TPM_SHORT,
 105	TPM_SHORT,
 106	TPM_SHORT,		/* 45 */
 107	TPM_SHORT,
 108	TPM_SHORT,
 109	TPM_SHORT,
 110	TPM_LONG,
 111	TPM_MEDIUM,		/* 50 */
 112	TPM_MEDIUM,
 113	TPM_UNDEFINED,
 114	TPM_UNDEFINED,
 115	TPM_UNDEFINED,
 116	TPM_UNDEFINED,		/* 55 */
 117	TPM_UNDEFINED,
 118	TPM_UNDEFINED,
 119	TPM_UNDEFINED,
 120	TPM_UNDEFINED,
 121	TPM_MEDIUM,		/* 60 */
 122	TPM_MEDIUM,
 123	TPM_MEDIUM,
 124	TPM_SHORT,
 125	TPM_SHORT,
 126	TPM_MEDIUM,		/* 65 */
 127	TPM_UNDEFINED,
 128	TPM_UNDEFINED,
 129	TPM_UNDEFINED,
 130	TPM_UNDEFINED,
 131	TPM_SHORT,		/* 70 */
 132	TPM_SHORT,
 133	TPM_UNDEFINED,
 134	TPM_UNDEFINED,
 135	TPM_UNDEFINED,
 136	TPM_UNDEFINED,		/* 75 */
 137	TPM_UNDEFINED,
 138	TPM_UNDEFINED,
 139	TPM_UNDEFINED,
 140	TPM_UNDEFINED,
 141	TPM_LONG,		/* 80 */
 142	TPM_UNDEFINED,
 143	TPM_MEDIUM,
 144	TPM_LONG,
 145	TPM_SHORT,
 146	TPM_UNDEFINED,		/* 85 */
 147	TPM_UNDEFINED,
 148	TPM_UNDEFINED,
 149	TPM_UNDEFINED,
 150	TPM_UNDEFINED,
 151	TPM_SHORT,		/* 90 */
 152	TPM_SHORT,
 153	TPM_SHORT,
 154	TPM_SHORT,
 155	TPM_SHORT,
 156	TPM_UNDEFINED,		/* 95 */
 157	TPM_UNDEFINED,
 158	TPM_UNDEFINED,
 159	TPM_UNDEFINED,
 160	TPM_UNDEFINED,
 161	TPM_MEDIUM,		/* 100 */
 162	TPM_SHORT,
 163	TPM_SHORT,
 164	TPM_UNDEFINED,
 165	TPM_UNDEFINED,
 166	TPM_UNDEFINED,		/* 105 */
 167	TPM_UNDEFINED,
 168	TPM_UNDEFINED,
 169	TPM_UNDEFINED,
 170	TPM_UNDEFINED,
 171	TPM_SHORT,		/* 110 */
 172	TPM_SHORT,
 173	TPM_SHORT,
 174	TPM_SHORT,
 175	TPM_SHORT,
 176	TPM_SHORT,		/* 115 */
 177	TPM_SHORT,
 178	TPM_SHORT,
 179	TPM_UNDEFINED,
 180	TPM_UNDEFINED,
 181	TPM_LONG,		/* 120 */
 182	TPM_LONG,
 183	TPM_MEDIUM,
 184	TPM_UNDEFINED,
 185	TPM_SHORT,
 186	TPM_SHORT,		/* 125 */
 187	TPM_SHORT,
 188	TPM_LONG,
 189	TPM_SHORT,
 190	TPM_SHORT,
 191	TPM_SHORT,		/* 130 */
 192	TPM_MEDIUM,
 193	TPM_UNDEFINED,
 194	TPM_SHORT,
 195	TPM_MEDIUM,
 196	TPM_UNDEFINED,		/* 135 */
 197	TPM_UNDEFINED,
 198	TPM_UNDEFINED,
 199	TPM_UNDEFINED,
 200	TPM_UNDEFINED,
 201	TPM_SHORT,		/* 140 */
 202	TPM_SHORT,
 203	TPM_UNDEFINED,
 204	TPM_UNDEFINED,
 205	TPM_UNDEFINED,
 206	TPM_UNDEFINED,		/* 145 */
 207	TPM_UNDEFINED,
 208	TPM_UNDEFINED,
 209	TPM_UNDEFINED,
 210	TPM_UNDEFINED,
 211	TPM_SHORT,		/* 150 */
 212	TPM_MEDIUM,
 213	TPM_MEDIUM,
 214	TPM_SHORT,
 215	TPM_SHORT,
 216	TPM_UNDEFINED,		/* 155 */
 217	TPM_UNDEFINED,
 218	TPM_UNDEFINED,
 219	TPM_UNDEFINED,
 220	TPM_UNDEFINED,
 221	TPM_SHORT,		/* 160 */
 222	TPM_SHORT,
 223	TPM_SHORT,
 224	TPM_SHORT,
 225	TPM_UNDEFINED,
 226	TPM_UNDEFINED,		/* 165 */
 227	TPM_UNDEFINED,
 228	TPM_UNDEFINED,
 229	TPM_UNDEFINED,
 230	TPM_UNDEFINED,
 231	TPM_LONG,		/* 170 */
 232	TPM_UNDEFINED,
 233	TPM_UNDEFINED,
 234	TPM_UNDEFINED,
 235	TPM_UNDEFINED,
 236	TPM_UNDEFINED,		/* 175 */
 237	TPM_UNDEFINED,
 238	TPM_UNDEFINED,
 239	TPM_UNDEFINED,
 240	TPM_UNDEFINED,
 241	TPM_MEDIUM,		/* 180 */
 242	TPM_SHORT,
 243	TPM_MEDIUM,
 244	TPM_MEDIUM,
 245	TPM_MEDIUM,
 246	TPM_MEDIUM,		/* 185 */
 247	TPM_SHORT,
 248	TPM_UNDEFINED,
 249	TPM_UNDEFINED,
 250	TPM_UNDEFINED,
 251	TPM_UNDEFINED,		/* 190 */
 252	TPM_UNDEFINED,
 253	TPM_UNDEFINED,
 254	TPM_UNDEFINED,
 255	TPM_UNDEFINED,
 256	TPM_UNDEFINED,		/* 195 */
 257	TPM_UNDEFINED,
 258	TPM_UNDEFINED,
 259	TPM_UNDEFINED,
 260	TPM_UNDEFINED,
 261	TPM_SHORT,		/* 200 */
 262	TPM_UNDEFINED,
 263	TPM_UNDEFINED,
 264	TPM_UNDEFINED,
 265	TPM_SHORT,
 266	TPM_SHORT,		/* 205 */
 267	TPM_SHORT,
 268	TPM_SHORT,
 269	TPM_SHORT,
 270	TPM_SHORT,
 271	TPM_MEDIUM,		/* 210 */
 272	TPM_UNDEFINED,
 273	TPM_MEDIUM,
 274	TPM_MEDIUM,
 275	TPM_MEDIUM,
 276	TPM_UNDEFINED,		/* 215 */
 277	TPM_MEDIUM,
 278	TPM_UNDEFINED,
 279	TPM_UNDEFINED,
 280	TPM_SHORT,
 281	TPM_SHORT,		/* 220 */
 282	TPM_SHORT,
 283	TPM_SHORT,
 284	TPM_SHORT,
 285	TPM_SHORT,
 286	TPM_UNDEFINED,		/* 225 */
 287	TPM_UNDEFINED,
 288	TPM_UNDEFINED,
 289	TPM_UNDEFINED,
 290	TPM_UNDEFINED,
 291	TPM_SHORT,		/* 230 */
 292	TPM_LONG,
 293	TPM_MEDIUM,
 294	TPM_UNDEFINED,
 295	TPM_UNDEFINED,
 296	TPM_UNDEFINED,		/* 235 */
 297	TPM_UNDEFINED,
 298	TPM_UNDEFINED,
 299	TPM_UNDEFINED,
 300	TPM_UNDEFINED,
 301	TPM_SHORT,		/* 240 */
 302	TPM_UNDEFINED,
 303	TPM_MEDIUM,
 304};
 305
 306/*
 307 * Returns max number of jiffies to wait
 308 */
 309unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
 310					   u32 ordinal)
 311{
 312	int duration_idx = TPM_UNDEFINED;
 313	int duration = 0;
 314
 315	/*
 316	 * We only have a duration table for protected commands, where the upper
 317	 * 16 bits are 0. For the few other ordinals the fallback will be used.
 318	 */
 319	if (ordinal < TPM_MAX_ORDINAL)
 320		duration_idx = tpm_ordinal_duration[ordinal];
 321
 322	if (duration_idx != TPM_UNDEFINED)
 323		duration = chip->duration[duration_idx];
 324	if (duration <= 0)
 325		return 2 * 60 * HZ;
 326	else
 327		return duration;
 328}
 329EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
 330
 331static int tpm_validate_command(struct tpm_chip *chip,
 332				 struct tpm_space *space,
 333				 const u8 *cmd,
 334				 size_t len)
 335{
 336	const struct tpm_input_header *header = (const void *)cmd;
 337	int i;
 338	u32 cc;
 339	u32 attrs;
 340	unsigned int nr_handles;
 341
 342	if (len < TPM_HEADER_SIZE)
 343		return -EINVAL;
 344
 345	if (!space)
 346		return 0;
 347
 348	if (chip->flags & TPM_CHIP_FLAG_TPM2 && chip->nr_commands) {
 349		cc = be32_to_cpu(header->ordinal);
 350
 351		i = tpm2_find_cc(chip, cc);
 352		if (i < 0) {
 353			dev_dbg(&chip->dev, "0x%04X is an invalid command\n",
 354				cc);
 355			return -EOPNOTSUPP;
 356		}
 357
 358		attrs = chip->cc_attrs_tbl[i];
 359		nr_handles =
 360			4 * ((attrs >> TPM2_CC_ATTR_CHANDLES) & GENMASK(2, 0));
 361		if (len < TPM_HEADER_SIZE + 4 * nr_handles)
 362			goto err_len;
 363	}
 364
 365	return 0;
 366err_len:
 367	dev_dbg(&chip->dev,
 368		"%s: insufficient command length %zu", __func__, len);
 369	return -EINVAL;
 370}
 371
 372static int tpm_request_locality(struct tpm_chip *chip)
 373{
 374	int rc;
 375
 376	if (!chip->ops->request_locality)
 377		return 0;
 378
 379	rc = chip->ops->request_locality(chip, 0);
 380	if (rc < 0)
 381		return rc;
 382
 383	chip->locality = rc;
 384
 385	return 0;
 386}
 387
 388static void tpm_relinquish_locality(struct tpm_chip *chip)
 389{
 390	int rc;
 391
 392	if (!chip->ops->relinquish_locality)
 393		return;
 394
 395	rc = chip->ops->relinquish_locality(chip, chip->locality);
 396	if (rc)
 397		dev_err(&chip->dev, "%s: : error %d\n", __func__, rc);
 398
 399	chip->locality = -1;
 400}
 401
 402static ssize_t tpm_try_transmit(struct tpm_chip *chip,
 403				struct tpm_space *space,
 404				u8 *buf, size_t bufsiz,
 405				unsigned int flags)
 406{
 407	struct tpm_output_header *header = (void *)buf;
 408	int rc;
 409	ssize_t len = 0;
 410	u32 count, ordinal;
 411	unsigned long stop;
 412	bool need_locality;
 413
 414	rc = tpm_validate_command(chip, space, buf, bufsiz);
 415	if (rc == -EINVAL)
 416		return rc;
 417	/*
 418	 * If the command is not implemented by the TPM, synthesize a
 419	 * response with a TPM2_RC_COMMAND_CODE return for user-space.
 420	 */
 421	if (rc == -EOPNOTSUPP) {
 422		header->length = cpu_to_be32(sizeof(*header));
 423		header->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
 424		header->return_code = cpu_to_be32(TPM2_RC_COMMAND_CODE |
 425						  TSS2_RESMGR_TPM_RC_LAYER);
 426		return bufsiz;
 427	}
 428
 429	if (bufsiz > TPM_BUFSIZE)
 430		bufsiz = TPM_BUFSIZE;
 431
 432	count = be32_to_cpu(*((__be32 *) (buf + 2)));
 433	ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
 434	if (count == 0)
 435		return -ENODATA;
 436	if (count > bufsiz) {
 437		dev_err(&chip->dev,
 438			"invalid count value %x %zx\n", count, bufsiz);
 439		return -E2BIG;
 440	}
 441
 442	if (!(flags & TPM_TRANSMIT_UNLOCKED))
 443		mutex_lock(&chip->tpm_mutex);
 444
 445
 446	if (chip->ops->clk_enable != NULL)
 447		chip->ops->clk_enable(chip, true);
 448
 449	/* Store the decision as chip->locality will be changed. */
 450	need_locality = chip->locality == -1;
 451
 452	if (!(flags & TPM_TRANSMIT_RAW) && need_locality) {
 453		rc = tpm_request_locality(chip);
 454		if (rc < 0)
 455			goto out_no_locality;
 456	}
 457
 458	if (chip->dev.parent)
 459		pm_runtime_get_sync(chip->dev.parent);
 460
 461	rc = tpm2_prepare_space(chip, space, ordinal, buf);
 462	if (rc)
 463		goto out;
 464
 465	rc = chip->ops->send(chip, buf, count);
 466	if (rc < 0) {
 467		if (rc != -EPIPE)
 468			dev_err(&chip->dev,
 469				"%s: tpm_send: error %d\n", __func__, rc);
 470		goto out;
 
 
 
 
 
 
 
 
 
 471	}
 472
 473	if (chip->flags & TPM_CHIP_FLAG_IRQ)
 474		goto out_recv;
 475
 476	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 477		stop = jiffies + tpm2_calc_ordinal_duration(chip, ordinal);
 478	else
 479		stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal);
 480	do {
 481		u8 status = chip->ops->status(chip);
 482		if ((status & chip->ops->req_complete_mask) ==
 483		    chip->ops->req_complete_val)
 484			goto out_recv;
 485
 486		if (chip->ops->req_canceled(chip, status)) {
 487			dev_err(&chip->dev, "Operation Canceled\n");
 488			rc = -ECANCELED;
 489			goto out;
 490		}
 491
 492		tpm_msleep(TPM_TIMEOUT);
 493		rmb();
 494	} while (time_before(jiffies, stop));
 495
 496	chip->ops->cancel(chip);
 497	dev_err(&chip->dev, "Operation Timed out\n");
 498	rc = -ETIME;
 499	goto out;
 500
 501out_recv:
 502	len = chip->ops->recv(chip, buf, bufsiz);
 503	if (len < 0) {
 504		rc = len;
 505		dev_err(&chip->dev,
 506			"tpm_transmit: tpm_recv: error %d\n", rc);
 507		goto out;
 508	} else if (len < TPM_HEADER_SIZE) {
 509		rc = -EFAULT;
 510		goto out;
 511	}
 512
 513	if (len != be32_to_cpu(header->length)) {
 514		rc = -EFAULT;
 515		goto out;
 516	}
 517
 518	rc = tpm2_commit_space(chip, space, ordinal, buf, &len);
 519
 520out:
 521	if (chip->dev.parent)
 522		pm_runtime_put_sync(chip->dev.parent);
 523
 524	if (need_locality)
 525		tpm_relinquish_locality(chip);
 526
 527out_no_locality:
 528	if (chip->ops->clk_enable != NULL)
 529		chip->ops->clk_enable(chip, false);
 530
 531	if (!(flags & TPM_TRANSMIT_UNLOCKED))
 532		mutex_unlock(&chip->tpm_mutex);
 533	return rc ? rc : len;
 534}
 535
 536/**
 537 * tpm_transmit - Internal kernel interface to transmit TPM commands.
 
 
 
 
 
 
 
 538 *
 539 * @chip: TPM chip to use
 540 * @space: tpm space
 541 * @buf: TPM command buffer
 542 * @bufsiz: length of the TPM command buffer
 543 * @flags: tpm transmit flags - bitmap
 544 *
 545 * A wrapper around tpm_try_transmit that handles TPM2_RC_RETRY
 546 * returns from the TPM and retransmits the command after a delay up
 547 * to a maximum wait of TPM2_DURATION_LONG.
 548 *
 549 * Note: TPM1 never returns TPM2_RC_RETRY so the retry logic is TPM2
 550 * only
 551 *
 552 * Return:
 553 *     the length of the return when the operation is successful.
 554 *     A negative number for system errors (errno).
 555 */
 556ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
 557		     u8 *buf, size_t bufsiz, unsigned int flags)
 558{
 559	struct tpm_output_header *header = (struct tpm_output_header *)buf;
 560	/* space for header and handles */
 561	u8 save[TPM_HEADER_SIZE + 3*sizeof(u32)];
 562	unsigned int delay_msec = TPM2_DURATION_SHORT;
 563	u32 rc = 0;
 564	ssize_t ret;
 565	const size_t save_size = min(space ? sizeof(save) : TPM_HEADER_SIZE,
 566				     bufsiz);
 567	/* the command code is where the return code will be */
 568	u32 cc = be32_to_cpu(header->return_code);
 569
 570	/*
 571	 * Subtlety here: if we have a space, the handles will be
 572	 * transformed, so when we restore the header we also have to
 573	 * restore the handles.
 574	 */
 575	memcpy(save, buf, save_size);
 576
 577	for (;;) {
 578		ret = tpm_try_transmit(chip, space, buf, bufsiz, flags);
 579		if (ret < 0)
 580			break;
 581		rc = be32_to_cpu(header->return_code);
 582		if (rc != TPM2_RC_RETRY && rc != TPM2_RC_TESTING)
 583			break;
 584		/*
 585		 * return immediately if self test returns test
 586		 * still running to shorten boot time.
 587		 */
 588		if (rc == TPM2_RC_TESTING && cc == TPM2_CC_SELF_TEST)
 589			break;
 590		delay_msec *= 2;
 591		if (delay_msec > TPM2_DURATION_LONG) {
 592			if (rc == TPM2_RC_RETRY)
 593				dev_err(&chip->dev, "in retry loop\n");
 594			else
 595				dev_err(&chip->dev,
 596					"self test is still running\n");
 597			break;
 598		}
 599		tpm_msleep(delay_msec);
 
 600		memcpy(buf, save, save_size);
 601	}
 602	return ret;
 603}
 
 604/**
 605 * tpm_transmit_cmd - send a tpm command to the device
 606 *    The function extracts tpm out header return code
 607 *
 608 * @chip: TPM chip to use
 609 * @space: tpm space
 610 * @buf: TPM command buffer
 611 * @bufsiz: length of the buffer
 612 * @min_rsp_body_length: minimum expected length of response body
 613 * @flags: tpm transmit flags - bitmap
 614 * @desc: command description used in the error message
 615 *
 616 * Return:
 617 *     0 when the operation is successful.
 618 *     A negative number for system errors (errno).
 619 *     A positive number for a TPM error.
 620 */
 621ssize_t tpm_transmit_cmd(struct tpm_chip *chip, struct tpm_space *space,
 622			 void *buf, size_t bufsiz,
 623			 size_t min_rsp_body_length, unsigned int flags,
 624			 const char *desc)
 625{
 626	const struct tpm_output_header *header = buf;
 627	int err;
 628	ssize_t len;
 629
 630	len = tpm_transmit(chip, space, buf, bufsiz, flags);
 631	if (len <  0)
 632		return len;
 633
 634	err = be32_to_cpu(header->return_code);
 635	if (err != 0 && desc)
 
 636		dev_err(&chip->dev, "A TPM error (%d) occurred %s\n", err,
 637			desc);
 638	if (err)
 639		return err;
 640
 641	if (len < min_rsp_body_length + TPM_HEADER_SIZE)
 642		return -EFAULT;
 643
 644	return 0;
 645}
 646EXPORT_SYMBOL_GPL(tpm_transmit_cmd);
 647
 648#define TPM_ORD_STARTUP 153
 649#define TPM_ST_CLEAR 1
 650
 651/**
 652 * tpm_startup - turn on the TPM
 653 * @chip: TPM chip to use
 654 *
 655 * Normally the firmware should start the TPM. This function is provided as a
 656 * workaround if this does not happen. A legal case for this could be for
 657 * example when a TPM emulator is used.
 658 *
 659 * Return: same as tpm_transmit_cmd()
 660 */
 661int tpm_startup(struct tpm_chip *chip)
 662{
 663	struct tpm_buf buf;
 664	int rc;
 665
 666	dev_info(&chip->dev, "starting up the TPM manually\n");
 667
 668	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
 669		rc = tpm_buf_init(&buf, TPM2_ST_NO_SESSIONS, TPM2_CC_STARTUP);
 670		if (rc < 0)
 671			return rc;
 672
 673		tpm_buf_append_u16(&buf, TPM2_SU_CLEAR);
 674	} else {
 675		rc = tpm_buf_init(&buf, TPM_TAG_RQU_COMMAND, TPM_ORD_STARTUP);
 676		if (rc < 0)
 677			return rc;
 678
 679		tpm_buf_append_u16(&buf, TPM_ST_CLEAR);
 680	}
 681
 682	rc = tpm_transmit_cmd(chip, NULL, buf.data, PAGE_SIZE, 0, 0,
 683			      "attempting to start the TPM");
 684
 685	tpm_buf_destroy(&buf);
 686	return rc;
 687}
 688
 689#define TPM_DIGEST_SIZE 20
 690#define TPM_RET_CODE_IDX 6
 691#define TPM_INTERNAL_RESULT_SIZE 200
 692#define TPM_ORD_GET_CAP 101
 693#define TPM_ORD_GET_RANDOM 70
 694
 695static const struct tpm_input_header tpm_getcap_header = {
 696	.tag = cpu_to_be16(TPM_TAG_RQU_COMMAND),
 697	.length = cpu_to_be32(22),
 698	.ordinal = cpu_to_be32(TPM_ORD_GET_CAP)
 699};
 700
 701ssize_t tpm_getcap(struct tpm_chip *chip, u32 subcap_id, cap_t *cap,
 702		   const char *desc, size_t min_cap_length)
 703{
 704	struct tpm_buf buf;
 705	int rc;
 706
 707	rc = tpm_buf_init(&buf, TPM_TAG_RQU_COMMAND, TPM_ORD_GET_CAP);
 708	if (rc)
 709		return rc;
 710
 711	if (subcap_id == TPM_CAP_VERSION_1_1 ||
 712	    subcap_id == TPM_CAP_VERSION_1_2) {
 713		tpm_buf_append_u32(&buf, subcap_id);
 714		tpm_buf_append_u32(&buf, 0);
 715	} else {
 716		if (subcap_id == TPM_CAP_FLAG_PERM ||
 717		    subcap_id == TPM_CAP_FLAG_VOL)
 718			tpm_buf_append_u32(&buf, TPM_CAP_FLAG);
 719		else
 720			tpm_buf_append_u32(&buf, TPM_CAP_PROP);
 721
 722		tpm_buf_append_u32(&buf, 4);
 723		tpm_buf_append_u32(&buf, subcap_id);
 724	}
 725	rc = tpm_transmit_cmd(chip, NULL, buf.data, PAGE_SIZE,
 726			      min_cap_length, 0, desc);
 727	if (!rc)
 728		*cap = *(cap_t *)&buf.data[TPM_HEADER_SIZE + 4];
 729
 730	tpm_buf_destroy(&buf);
 731	return rc;
 732}
 733EXPORT_SYMBOL_GPL(tpm_getcap);
 734
 735int tpm_get_timeouts(struct tpm_chip *chip)
 736{
 737	cap_t cap;
 738	unsigned long timeout_old[4], timeout_chip[4], timeout_eff[4];
 739	ssize_t rc;
 740
 741	if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS)
 742		return 0;
 743
 744	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
 745		/* Fixed timeouts for TPM2 */
 746		chip->timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
 747		chip->timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
 748		chip->timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
 749		chip->timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
 750		chip->duration[TPM_SHORT] =
 751		    msecs_to_jiffies(TPM2_DURATION_SHORT);
 752		chip->duration[TPM_MEDIUM] =
 753		    msecs_to_jiffies(TPM2_DURATION_MEDIUM);
 754		chip->duration[TPM_LONG] =
 755		    msecs_to_jiffies(TPM2_DURATION_LONG);
 756		chip->duration[TPM_LONG_LONG] =
 757		    msecs_to_jiffies(TPM2_DURATION_LONG_LONG);
 758
 759		chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS;
 760		return 0;
 761	}
 762
 763	rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, NULL,
 764			sizeof(cap.timeout));
 765	if (rc == TPM_ERR_INVALID_POSTINIT) {
 766		if (tpm_startup(chip))
 767			return rc;
 768
 769		rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap,
 770				"attempting to determine the timeouts",
 771				sizeof(cap.timeout));
 772	}
 773
 774	if (rc) {
 775		dev_err(&chip->dev,
 776			"A TPM error (%zd) occurred attempting to determine the timeouts\n",
 777			rc);
 778		return rc;
 779	}
 780
 781	timeout_old[0] = jiffies_to_usecs(chip->timeout_a);
 782	timeout_old[1] = jiffies_to_usecs(chip->timeout_b);
 783	timeout_old[2] = jiffies_to_usecs(chip->timeout_c);
 784	timeout_old[3] = jiffies_to_usecs(chip->timeout_d);
 785	timeout_chip[0] = be32_to_cpu(cap.timeout.a);
 786	timeout_chip[1] = be32_to_cpu(cap.timeout.b);
 787	timeout_chip[2] = be32_to_cpu(cap.timeout.c);
 788	timeout_chip[3] = be32_to_cpu(cap.timeout.d);
 789	memcpy(timeout_eff, timeout_chip, sizeof(timeout_eff));
 790
 791	/*
 792	 * Provide ability for vendor overrides of timeout values in case
 793	 * of misreporting.
 794	 */
 795	if (chip->ops->update_timeouts != NULL)
 796		chip->timeout_adjusted =
 797			chip->ops->update_timeouts(chip, timeout_eff);
 798
 799	if (!chip->timeout_adjusted) {
 800		/* Restore default if chip reported 0 */
 801		int i;
 802
 803		for (i = 0; i < ARRAY_SIZE(timeout_eff); i++) {
 804			if (timeout_eff[i])
 805				continue;
 806
 807			timeout_eff[i] = timeout_old[i];
 808			chip->timeout_adjusted = true;
 809		}
 810
 811		if (timeout_eff[0] != 0 && timeout_eff[0] < 1000) {
 812			/* timeouts in msec rather usec */
 813			for (i = 0; i != ARRAY_SIZE(timeout_eff); i++)
 814				timeout_eff[i] *= 1000;
 815			chip->timeout_adjusted = true;
 816		}
 817	}
 818
 819	/* Report adjusted timeouts */
 820	if (chip->timeout_adjusted) {
 821		dev_info(&chip->dev,
 822			 HW_ERR "Adjusting reported timeouts: A %lu->%luus B %lu->%luus C %lu->%luus D %lu->%luus\n",
 823			 timeout_chip[0], timeout_eff[0],
 824			 timeout_chip[1], timeout_eff[1],
 825			 timeout_chip[2], timeout_eff[2],
 826			 timeout_chip[3], timeout_eff[3]);
 827	}
 828
 829	chip->timeout_a = usecs_to_jiffies(timeout_eff[0]);
 830	chip->timeout_b = usecs_to_jiffies(timeout_eff[1]);
 831	chip->timeout_c = usecs_to_jiffies(timeout_eff[2]);
 832	chip->timeout_d = usecs_to_jiffies(timeout_eff[3]);
 833
 834	rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_DURATION, &cap,
 835			"attempting to determine the durations",
 836			sizeof(cap.duration));
 837	if (rc)
 838		return rc;
 839
 840	chip->duration[TPM_SHORT] =
 841		usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_short));
 842	chip->duration[TPM_MEDIUM] =
 843		usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_medium));
 844	chip->duration[TPM_LONG] =
 845		usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_long));
 846	chip->duration[TPM_LONG_LONG] = 0; /* not used under 1.2 */
 847
 848	/* The Broadcom BCM0102 chipset in a Dell Latitude D820 gets the above
 849	 * value wrong and apparently reports msecs rather than usecs. So we
 850	 * fix up the resulting too-small TPM_SHORT value to make things work.
 851	 * We also scale the TPM_MEDIUM and -_LONG values by 1000.
 852	 */
 853	if (chip->duration[TPM_SHORT] < (HZ / 100)) {
 854		chip->duration[TPM_SHORT] = HZ;
 855		chip->duration[TPM_MEDIUM] *= 1000;
 856		chip->duration[TPM_LONG] *= 1000;
 857		chip->duration_adjusted = true;
 858		dev_info(&chip->dev, "Adjusting TPM timeout parameters.");
 859	}
 860
 861	chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS;
 862	return 0;
 863}
 864EXPORT_SYMBOL_GPL(tpm_get_timeouts);
 865
 866#define TPM_ORD_CONTINUE_SELFTEST 83
 867#define CONTINUE_SELFTEST_RESULT_SIZE 10
 868
 869static const struct tpm_input_header continue_selftest_header = {
 870	.tag = cpu_to_be16(TPM_TAG_RQU_COMMAND),
 871	.length = cpu_to_be32(10),
 872	.ordinal = cpu_to_be32(TPM_ORD_CONTINUE_SELFTEST),
 873};
 874
 875/**
 876 * tpm_continue_selftest -- run TPM's selftest
 877 * @chip: TPM chip to use
 878 *
 879 * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing
 880 * a TPM error code.
 881 */
 882static int tpm_continue_selftest(struct tpm_chip *chip)
 883{
 884	int rc;
 885	struct tpm_cmd_t cmd;
 886
 887	cmd.header.in = continue_selftest_header;
 888	rc = tpm_transmit_cmd(chip, NULL, &cmd, CONTINUE_SELFTEST_RESULT_SIZE,
 889			      0, 0, "continue selftest");
 890	return rc;
 891}
 892
 893#define TPM_ORDINAL_PCRREAD 21
 894#define READ_PCR_RESULT_SIZE 30
 895#define READ_PCR_RESULT_BODY_SIZE 20
 896static const struct tpm_input_header pcrread_header = {
 897	.tag = cpu_to_be16(TPM_TAG_RQU_COMMAND),
 898	.length = cpu_to_be32(14),
 899	.ordinal = cpu_to_be32(TPM_ORDINAL_PCRREAD)
 900};
 901
 902int tpm_pcr_read_dev(struct tpm_chip *chip, int pcr_idx, u8 *res_buf)
 903{
 904	int rc;
 905	struct tpm_cmd_t cmd;
 906
 907	cmd.header.in = pcrread_header;
 908	cmd.params.pcrread_in.pcr_idx = cpu_to_be32(pcr_idx);
 909	rc = tpm_transmit_cmd(chip, NULL, &cmd, READ_PCR_RESULT_SIZE,
 910			      READ_PCR_RESULT_BODY_SIZE, 0,
 911			      "attempting to read a pcr value");
 912
 913	if (rc == 0)
 914		memcpy(res_buf, cmd.params.pcrread_out.pcr_result,
 915		       TPM_DIGEST_SIZE);
 916	return rc;
 917}
 918
 919/**
 920 * tpm_is_tpm2 - do we a have a TPM2 chip?
 921 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
 922 *
 923 * Return:
 924 * 1 if we have a TPM2 chip.
 925 * 0 if we don't have a TPM2 chip.
 926 * A negative number for system errors (errno).
 927 */
 928int tpm_is_tpm2(struct tpm_chip *chip)
 929{
 930	int rc;
 931
 932	chip = tpm_chip_find_get(chip);
 933	if (!chip)
 934		return -ENODEV;
 935
 936	rc = (chip->flags & TPM_CHIP_FLAG_TPM2) != 0;
 937
 938	tpm_put_ops(chip);
 939
 940	return rc;
 941}
 942EXPORT_SYMBOL_GPL(tpm_is_tpm2);
 943
 944/**
 945 * tpm_pcr_read - read a PCR value from SHA1 bank
 946 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
 947 * @pcr_idx:	the PCR to be retrieved
 948 * @res_buf:	the value of the PCR
 949 *
 950 * Return: same as with tpm_transmit_cmd()
 951 */
 952int tpm_pcr_read(struct tpm_chip *chip, int pcr_idx, u8 *res_buf)
 
 953{
 954	int rc;
 955
 956	chip = tpm_chip_find_get(chip);
 957	if (!chip)
 958		return -ENODEV;
 
 959	if (chip->flags & TPM_CHIP_FLAG_TPM2)
 960		rc = tpm2_pcr_read(chip, pcr_idx, res_buf);
 961	else
 962		rc = tpm_pcr_read_dev(chip, pcr_idx, res_buf);
 
 963	tpm_put_ops(chip);
 964	return rc;
 965}
 966EXPORT_SYMBOL_GPL(tpm_pcr_read);
 967
 968#define TPM_ORD_PCR_EXTEND 20
 969#define EXTEND_PCR_RESULT_SIZE 34
 970#define EXTEND_PCR_RESULT_BODY_SIZE 20
 971static const struct tpm_input_header pcrextend_header = {
 972	.tag = cpu_to_be16(TPM_TAG_RQU_COMMAND),
 973	.length = cpu_to_be32(34),
 974	.ordinal = cpu_to_be32(TPM_ORD_PCR_EXTEND)
 975};
 976
 977static int tpm1_pcr_extend(struct tpm_chip *chip, int pcr_idx, const u8 *hash,
 978			   char *log_msg)
 979{
 980	struct tpm_buf buf;
 981	int rc;
 982
 983	rc = tpm_buf_init(&buf, TPM_TAG_RQU_COMMAND, TPM_ORD_PCR_EXTEND);
 984	if (rc)
 985		return rc;
 986
 987	tpm_buf_append_u32(&buf, pcr_idx);
 988	tpm_buf_append(&buf, hash, TPM_DIGEST_SIZE);
 989
 990	rc = tpm_transmit_cmd(chip, NULL, buf.data, EXTEND_PCR_RESULT_SIZE,
 991			      EXTEND_PCR_RESULT_BODY_SIZE, 0, log_msg);
 992	tpm_buf_destroy(&buf);
 993	return rc;
 994}
 995
 996/**
 997 * tpm_pcr_extend - extend a PCR value in SHA1 bank.
 998 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
 999 * @pcr_idx:	the PCR to be retrieved
1000 * @hash:	the hash value used to extend the PCR value
1001 *
1002 * Note: with TPM 2.0 extends also those banks with a known digest size to the
1003 * cryto subsystem in order to prevent malicious use of those PCR banks. In the
1004 * future we should dynamically determine digest sizes.
1005 *
1006 * Return: same as with tpm_transmit_cmd()
1007 */
1008int tpm_pcr_extend(struct tpm_chip *chip, int pcr_idx, const u8 *hash)
 
1009{
1010	int rc;
1011	struct tpm2_digest digest_list[ARRAY_SIZE(chip->active_banks)];
1012	u32 count = 0;
1013	int i;
1014
1015	chip = tpm_chip_find_get(chip);
1016	if (!chip)
1017		return -ENODEV;
1018
1019	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
1020		memset(digest_list, 0, sizeof(digest_list));
1021
1022		for (i = 0; i < ARRAY_SIZE(chip->active_banks) &&
1023			    chip->active_banks[i] != TPM2_ALG_ERROR; i++) {
1024			digest_list[i].alg_id = chip->active_banks[i];
1025			memcpy(digest_list[i].digest, hash, TPM_DIGEST_SIZE);
1026			count++;
1027		}
 
1028
1029		rc = tpm2_pcr_extend(chip, pcr_idx, count, digest_list);
1030		tpm_put_ops(chip);
1031		return rc;
1032	}
1033
1034	rc = tpm1_pcr_extend(chip, pcr_idx, hash,
1035			     "attempting extend a PCR value");
 
 
1036	tpm_put_ops(chip);
1037	return rc;
1038}
1039EXPORT_SYMBOL_GPL(tpm_pcr_extend);
1040
1041/**
1042 * tpm_do_selftest - have the TPM continue its selftest and wait until it
1043 *                   can receive further commands
1044 * @chip: TPM chip to use
1045 *
1046 * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing
1047 * a TPM error code.
1048 */
1049int tpm_do_selftest(struct tpm_chip *chip)
1050{
1051	int rc;
1052	unsigned int loops;
1053	unsigned int delay_msec = 100;
1054	unsigned long duration;
1055	u8 dummy[TPM_DIGEST_SIZE];
1056
1057	duration = tpm_calc_ordinal_duration(chip, TPM_ORD_CONTINUE_SELFTEST);
1058
1059	loops = jiffies_to_msecs(duration) / delay_msec;
1060
1061	rc = tpm_continue_selftest(chip);
1062	if (rc == TPM_ERR_INVALID_POSTINIT) {
1063		chip->flags |= TPM_CHIP_FLAG_ALWAYS_POWERED;
1064		dev_info(&chip->dev, "TPM not ready (%d)\n", rc);
1065	}
1066	/* This may fail if there was no TPM driver during a suspend/resume
1067	 * cycle; some may return 10 (BAD_ORDINAL), others 28 (FAILEDSELFTEST)
1068	 */
1069	if (rc)
1070		return rc;
1071
1072	do {
1073		/* Attempt to read a PCR value */
1074		rc = tpm_pcr_read_dev(chip, 0, dummy);
1075
1076		/* Some buggy TPMs will not respond to tpm_tis_ready() for
1077		 * around 300ms while the self test is ongoing, keep trying
1078		 * until the self test duration expires. */
1079		if (rc == -ETIME) {
1080			dev_info(
1081			    &chip->dev, HW_ERR
1082			    "TPM command timed out during continue self test");
1083			tpm_msleep(delay_msec);
1084			continue;
1085		}
1086
1087		if (rc == TPM_ERR_DISABLED || rc == TPM_ERR_DEACTIVATED) {
1088			dev_info(&chip->dev,
1089				 "TPM is disabled/deactivated (0x%X)\n", rc);
1090			/* TPM is disabled and/or deactivated; driver can
1091			 * proceed and TPM does handle commands for
1092			 * suspend/resume correctly
1093			 */
1094			return 0;
1095		}
1096		if (rc != TPM_WARN_DOING_SELFTEST)
1097			return rc;
1098		tpm_msleep(delay_msec);
1099	} while (--loops > 0);
1100
1101	return rc;
1102}
1103EXPORT_SYMBOL_GPL(tpm_do_selftest);
1104
1105/**
1106 * tpm1_auto_startup - Perform the standard automatic TPM initialization
1107 *                     sequence
1108 * @chip: TPM chip to use
1109 *
1110 * Returns 0 on success, < 0 in case of fatal error.
1111 */
1112int tpm1_auto_startup(struct tpm_chip *chip)
1113{
1114	int rc;
1115
1116	rc = tpm_get_timeouts(chip);
1117	if (rc)
1118		goto out;
1119	rc = tpm_do_selftest(chip);
1120	if (rc) {
1121		dev_err(&chip->dev, "TPM self test failed\n");
1122		goto out;
1123	}
1124
1125	return rc;
1126out:
1127	if (rc > 0)
1128		rc = -ENODEV;
1129	return rc;
1130}
1131
1132/**
1133 * tpm_send - send a TPM command
1134 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
1135 * @cmd:	a TPM command buffer
1136 * @buflen:	the length of the TPM command buffer
1137 *
1138 * Return: same as with tpm_transmit_cmd()
1139 */
1140int tpm_send(struct tpm_chip *chip, void *cmd, size_t buflen)
1141{
 
1142	int rc;
1143
1144	chip = tpm_chip_find_get(chip);
1145	if (!chip)
1146		return -ENODEV;
1147
1148	rc = tpm_transmit_cmd(chip, NULL, cmd, buflen, 0, 0,
1149			      "attempting to a send a command");
 
1150	tpm_put_ops(chip);
1151	return rc;
1152}
1153EXPORT_SYMBOL_GPL(tpm_send);
1154
1155#define TPM_ORD_SAVESTATE 152
1156#define SAVESTATE_RESULT_SIZE 10
 
1157
1158static const struct tpm_input_header savestate_header = {
1159	.tag = cpu_to_be16(TPM_TAG_RQU_COMMAND),
1160	.length = cpu_to_be32(10),
1161	.ordinal = cpu_to_be32(TPM_ORD_SAVESTATE)
1162};
 
 
 
 
 
1163
1164/*
1165 * We are about to suspend. Save the TPM state
1166 * so that it can be restored.
1167 */
1168int tpm_pm_suspend(struct device *dev)
1169{
1170	struct tpm_chip *chip = dev_get_drvdata(dev);
1171	struct tpm_cmd_t cmd;
1172	int rc, try;
1173
1174	u8 dummy_hash[TPM_DIGEST_SIZE] = { 0 };
1175
1176	if (chip == NULL)
1177		return -ENODEV;
1178
1179	if (chip->flags & TPM_CHIP_FLAG_ALWAYS_POWERED)
1180		return 0;
 
 
 
 
 
 
 
 
 
 
 
1181
1182	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
1183		tpm2_shutdown(chip, TPM2_SU_STATE);
1184		return 0;
1185	}
1186
1187	/* for buggy tpm, flush pcrs with extend to selected dummy */
1188	if (tpm_suspend_pcr)
1189		rc = tpm1_pcr_extend(chip, tpm_suspend_pcr, dummy_hash,
1190				     "extending dummy pcr before suspend");
1191
1192	/* now do the actual savestate */
1193	for (try = 0; try < TPM_RETRY; try++) {
1194		cmd.header.in = savestate_header;
1195		rc = tpm_transmit_cmd(chip, NULL, &cmd, SAVESTATE_RESULT_SIZE,
1196				      0, 0, NULL);
1197
1198		/*
1199		 * If the TPM indicates that it is too busy to respond to
1200		 * this command then retry before giving up.  It can take
1201		 * several seconds for this TPM to be ready.
1202		 *
1203		 * This can happen if the TPM has already been sent the
1204		 * SaveState command before the driver has loaded.  TCG 1.2
1205		 * specification states that any communication after SaveState
1206		 * may cause the TPM to invalidate previously saved state.
1207		 */
1208		if (rc != TPM_WARN_RETRY)
1209			break;
1210		tpm_msleep(TPM_TIMEOUT_RETRY);
1211	}
1212
1213	if (rc)
1214		dev_err(&chip->dev,
1215			"Error (%d) sending savestate before suspend\n", rc);
1216	else if (try > 0)
1217		dev_warn(&chip->dev, "TPM savestate took %dms\n",
1218			 try * TPM_TIMEOUT_RETRY);
1219
1220	return rc;
1221}
1222EXPORT_SYMBOL_GPL(tpm_pm_suspend);
1223
1224/*
1225 * Resume from a power safe. The BIOS already restored
1226 * the TPM state.
1227 */
1228int tpm_pm_resume(struct device *dev)
1229{
1230	struct tpm_chip *chip = dev_get_drvdata(dev);
1231
1232	if (chip == NULL)
1233		return -ENODEV;
1234
 
 
 
 
 
 
 
 
1235	return 0;
1236}
1237EXPORT_SYMBOL_GPL(tpm_pm_resume);
1238
1239#define TPM_GETRANDOM_RESULT_SIZE	18
1240static const struct tpm_input_header tpm_getrandom_header = {
1241	.tag = cpu_to_be16(TPM_TAG_RQU_COMMAND),
1242	.length = cpu_to_be32(14),
1243	.ordinal = cpu_to_be32(TPM_ORD_GET_RANDOM)
1244};
1245
1246/**
1247 * tpm_get_random() - get random bytes from the TPM's RNG
1248 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
1249 * @out:	destination buffer for the random bytes
1250 * @max:	the max number of bytes to write to @out
1251 *
1252 * Return: same as with tpm_transmit_cmd()
1253 */
1254int tpm_get_random(struct tpm_chip *chip, u8 *out, size_t max)
1255{
1256	struct tpm_cmd_t tpm_cmd;
1257	u32 recd, num_bytes = min_t(u32, max, TPM_MAX_RNG_DATA), rlength;
1258	int err, total = 0, retries = 5;
1259	u8 *dest = out;
1260
1261	if (!out || !num_bytes || max > TPM_MAX_RNG_DATA)
1262		return -EINVAL;
1263
1264	chip = tpm_chip_find_get(chip);
1265	if (!chip)
1266		return -ENODEV;
1267
1268	if (chip->flags & TPM_CHIP_FLAG_TPM2) {
1269		err = tpm2_get_random(chip, out, max);
1270		tpm_put_ops(chip);
1271		return err;
1272	}
1273
1274	do {
1275		tpm_cmd.header.in = tpm_getrandom_header;
1276		tpm_cmd.params.getrandom_in.num_bytes = cpu_to_be32(num_bytes);
1277
1278		err = tpm_transmit_cmd(chip, NULL, &tpm_cmd,
1279				       TPM_GETRANDOM_RESULT_SIZE + num_bytes,
1280				       offsetof(struct tpm_getrandom_out,
1281						rng_data),
1282				       0, "attempting get random");
1283		if (err)
1284			break;
1285
1286		recd = be32_to_cpu(tpm_cmd.params.getrandom_out.rng_data_len);
1287		if (recd > num_bytes) {
1288			total = -EFAULT;
1289			break;
1290		}
1291
1292		rlength = be32_to_cpu(tpm_cmd.header.out.length);
1293		if (rlength < offsetof(struct tpm_getrandom_out, rng_data) +
1294			      recd) {
1295			total = -EFAULT;
1296			break;
1297		}
1298		memcpy(dest, tpm_cmd.params.getrandom_out.rng_data, recd);
1299
1300		dest += recd;
1301		total += recd;
1302		num_bytes -= recd;
1303	} while (retries-- && total < max);
1304
1305	tpm_put_ops(chip);
1306	return total ? total : -EIO;
1307}
1308EXPORT_SYMBOL_GPL(tpm_get_random);
1309
1310/**
1311 * tpm_seal_trusted() - seal a trusted key payload
1312 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
1313 * @options:	authentication values and other options
1314 * @payload:	the key data in clear and encrypted form
1315 *
1316 * Note: only TPM 2.0 chip are supported. TPM 1.x implementation is located in
1317 * the keyring subsystem.
1318 *
1319 * Return: same as with tpm_transmit_cmd()
1320 */
1321int tpm_seal_trusted(struct tpm_chip *chip, struct trusted_key_payload *payload,
1322		     struct trusted_key_options *options)
1323{
1324	int rc;
1325
1326	chip = tpm_chip_find_get(chip);
1327	if (!chip || !(chip->flags & TPM_CHIP_FLAG_TPM2))
1328		return -ENODEV;
1329
1330	rc = tpm2_seal_trusted(chip, payload, options);
1331
1332	tpm_put_ops(chip);
1333	return rc;
1334}
1335EXPORT_SYMBOL_GPL(tpm_seal_trusted);
1336
1337/**
1338 * tpm_unseal_trusted() - unseal a trusted key
1339 * @chip:	a &struct tpm_chip instance, %NULL for the default chip
1340 * @options:	authentication values and other options
1341 * @payload:	the key data in clear and encrypted form
1342 *
1343 * Note: only TPM 2.0 chip are supported. TPM 1.x implementation is located in
1344 * the keyring subsystem.
1345 *
1346 * Return: same as with tpm_transmit_cmd()
1347 */
1348int tpm_unseal_trusted(struct tpm_chip *chip,
1349		       struct trusted_key_payload *payload,
1350		       struct trusted_key_options *options)
1351{
1352	int rc;
1353
1354	chip = tpm_chip_find_get(chip);
1355	if (!chip || !(chip->flags & TPM_CHIP_FLAG_TPM2))
1356		return -ENODEV;
1357
1358	rc = tpm2_unseal_trusted(chip, payload, options);
1359
1360	tpm_put_ops(chip);
1361
1362	return rc;
1363}
1364EXPORT_SYMBOL_GPL(tpm_unseal_trusted);
1365
1366static int __init tpm_init(void)
1367{
1368	int rc;
1369
1370	tpm_class = class_create(THIS_MODULE, "tpm");
1371	if (IS_ERR(tpm_class)) {
1372		pr_err("couldn't create tpm class\n");
1373		return PTR_ERR(tpm_class);
1374	}
1375
1376	tpmrm_class = class_create(THIS_MODULE, "tpmrm");
1377	if (IS_ERR(tpmrm_class)) {
1378		pr_err("couldn't create tpmrm class\n");
1379		class_destroy(tpm_class);
1380		return PTR_ERR(tpmrm_class);
1381	}
1382
1383	rc = alloc_chrdev_region(&tpm_devt, 0, 2*TPM_NUM_DEVICES, "tpm");
1384	if (rc < 0) {
1385		pr_err("tpm: failed to allocate char dev region\n");
1386		class_destroy(tpmrm_class);
1387		class_destroy(tpm_class);
1388		return rc;
 
 
 
 
1389	}
1390
1391	return 0;
 
 
 
 
 
 
 
 
 
1392}
1393
1394static void __exit tpm_exit(void)
1395{
1396	idr_destroy(&dev_nums_idr);
1397	class_destroy(tpm_class);
1398	class_destroy(tpmrm_class);
1399	unregister_chrdev_region(tpm_devt, 2*TPM_NUM_DEVICES);
 
1400}
1401
1402subsys_initcall(tpm_init);
1403module_exit(tpm_exit);
1404
1405MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
1406MODULE_DESCRIPTION("TPM Driver");
1407MODULE_VERSION("2.0");
1408MODULE_LICENSE("GPL");