tpm-interface.c 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231
  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. #include <linux/poll.h>
  27. #include <linux/slab.h>
  28. #include <linux/mutex.h>
  29. #include <linux/spinlock.h>
  30. #include <linux/freezer.h>
  31. #include <linux/pm_runtime.h>
  32. #include "tpm.h"
  33. #include "tpm_eventlog.h"
  34. #define TPM_MAX_ORDINAL 243
  35. #define TSC_MAX_ORDINAL 12
  36. #define TPM_PROTECTED_COMMAND 0x00
  37. #define TPM_CONNECTION_COMMAND 0x40
  38. /*
  39. * Bug workaround - some TPM's don't flush the most
  40. * recently changed pcr on suspend, so force the flush
  41. * with an extend to the selected _unused_ non-volatile pcr.
  42. */
  43. static int tpm_suspend_pcr;
  44. module_param_named(suspend_pcr, tpm_suspend_pcr, uint, 0644);
  45. MODULE_PARM_DESC(suspend_pcr,
  46. "PCR to use for dummy writes to facilitate flush on suspend.");
  47. /*
  48. * Array with one entry per ordinal defining the maximum amount
  49. * of time the chip could take to return the result. The ordinal
  50. * designation of short, medium or long is defined in a table in
  51. * TCG Specification TPM Main Part 2 TPM Structures Section 17. The
  52. * values of the SHORT, MEDIUM, and LONG durations are retrieved
  53. * from the chip during initialization with a call to tpm_get_timeouts.
  54. */
  55. static const u8 tpm_ordinal_duration[TPM_MAX_ORDINAL] = {
  56. TPM_UNDEFINED, /* 0 */
  57. TPM_UNDEFINED,
  58. TPM_UNDEFINED,
  59. TPM_UNDEFINED,
  60. TPM_UNDEFINED,
  61. TPM_UNDEFINED, /* 5 */
  62. TPM_UNDEFINED,
  63. TPM_UNDEFINED,
  64. TPM_UNDEFINED,
  65. TPM_UNDEFINED,
  66. TPM_SHORT, /* 10 */
  67. TPM_SHORT,
  68. TPM_MEDIUM,
  69. TPM_LONG,
  70. TPM_LONG,
  71. TPM_MEDIUM, /* 15 */
  72. TPM_SHORT,
  73. TPM_SHORT,
  74. TPM_MEDIUM,
  75. TPM_LONG,
  76. TPM_SHORT, /* 20 */
  77. TPM_SHORT,
  78. TPM_MEDIUM,
  79. TPM_MEDIUM,
  80. TPM_MEDIUM,
  81. TPM_SHORT, /* 25 */
  82. TPM_SHORT,
  83. TPM_MEDIUM,
  84. TPM_SHORT,
  85. TPM_SHORT,
  86. TPM_MEDIUM, /* 30 */
  87. TPM_LONG,
  88. TPM_MEDIUM,
  89. TPM_SHORT,
  90. TPM_SHORT,
  91. TPM_SHORT, /* 35 */
  92. TPM_MEDIUM,
  93. TPM_MEDIUM,
  94. TPM_UNDEFINED,
  95. TPM_UNDEFINED,
  96. TPM_MEDIUM, /* 40 */
  97. TPM_LONG,
  98. TPM_MEDIUM,
  99. TPM_SHORT,
  100. TPM_SHORT,
  101. TPM_SHORT, /* 45 */
  102. TPM_SHORT,
  103. TPM_SHORT,
  104. TPM_SHORT,
  105. TPM_LONG,
  106. TPM_MEDIUM, /* 50 */
  107. TPM_MEDIUM,
  108. TPM_UNDEFINED,
  109. TPM_UNDEFINED,
  110. TPM_UNDEFINED,
  111. TPM_UNDEFINED, /* 55 */
  112. TPM_UNDEFINED,
  113. TPM_UNDEFINED,
  114. TPM_UNDEFINED,
  115. TPM_UNDEFINED,
  116. TPM_MEDIUM, /* 60 */
  117. TPM_MEDIUM,
  118. TPM_MEDIUM,
  119. TPM_SHORT,
  120. TPM_SHORT,
  121. TPM_MEDIUM, /* 65 */
  122. TPM_UNDEFINED,
  123. TPM_UNDEFINED,
  124. TPM_UNDEFINED,
  125. TPM_UNDEFINED,
  126. TPM_SHORT, /* 70 */
  127. TPM_SHORT,
  128. TPM_UNDEFINED,
  129. TPM_UNDEFINED,
  130. TPM_UNDEFINED,
  131. TPM_UNDEFINED, /* 75 */
  132. TPM_UNDEFINED,
  133. TPM_UNDEFINED,
  134. TPM_UNDEFINED,
  135. TPM_UNDEFINED,
  136. TPM_LONG, /* 80 */
  137. TPM_UNDEFINED,
  138. TPM_MEDIUM,
  139. TPM_LONG,
  140. TPM_SHORT,
  141. TPM_UNDEFINED, /* 85 */
  142. TPM_UNDEFINED,
  143. TPM_UNDEFINED,
  144. TPM_UNDEFINED,
  145. TPM_UNDEFINED,
  146. TPM_SHORT, /* 90 */
  147. TPM_SHORT,
  148. TPM_SHORT,
  149. TPM_SHORT,
  150. TPM_SHORT,
  151. TPM_UNDEFINED, /* 95 */
  152. TPM_UNDEFINED,
  153. TPM_UNDEFINED,
  154. TPM_UNDEFINED,
  155. TPM_UNDEFINED,
  156. TPM_MEDIUM, /* 100 */
  157. TPM_SHORT,
  158. TPM_SHORT,
  159. TPM_UNDEFINED,
  160. TPM_UNDEFINED,
  161. TPM_UNDEFINED, /* 105 */
  162. TPM_UNDEFINED,
  163. TPM_UNDEFINED,
  164. TPM_UNDEFINED,
  165. TPM_UNDEFINED,
  166. TPM_SHORT, /* 110 */
  167. TPM_SHORT,
  168. TPM_SHORT,
  169. TPM_SHORT,
  170. TPM_SHORT,
  171. TPM_SHORT, /* 115 */
  172. TPM_SHORT,
  173. TPM_SHORT,
  174. TPM_UNDEFINED,
  175. TPM_UNDEFINED,
  176. TPM_LONG, /* 120 */
  177. TPM_LONG,
  178. TPM_MEDIUM,
  179. TPM_UNDEFINED,
  180. TPM_SHORT,
  181. TPM_SHORT, /* 125 */
  182. TPM_SHORT,
  183. TPM_LONG,
  184. TPM_SHORT,
  185. TPM_SHORT,
  186. TPM_SHORT, /* 130 */
  187. TPM_MEDIUM,
  188. TPM_UNDEFINED,
  189. TPM_SHORT,
  190. TPM_MEDIUM,
  191. TPM_UNDEFINED, /* 135 */
  192. TPM_UNDEFINED,
  193. TPM_UNDEFINED,
  194. TPM_UNDEFINED,
  195. TPM_UNDEFINED,
  196. TPM_SHORT, /* 140 */
  197. TPM_SHORT,
  198. TPM_UNDEFINED,
  199. TPM_UNDEFINED,
  200. TPM_UNDEFINED,
  201. TPM_UNDEFINED, /* 145 */
  202. TPM_UNDEFINED,
  203. TPM_UNDEFINED,
  204. TPM_UNDEFINED,
  205. TPM_UNDEFINED,
  206. TPM_SHORT, /* 150 */
  207. TPM_MEDIUM,
  208. TPM_MEDIUM,
  209. TPM_SHORT,
  210. TPM_SHORT,
  211. TPM_UNDEFINED, /* 155 */
  212. TPM_UNDEFINED,
  213. TPM_UNDEFINED,
  214. TPM_UNDEFINED,
  215. TPM_UNDEFINED,
  216. TPM_SHORT, /* 160 */
  217. TPM_SHORT,
  218. TPM_SHORT,
  219. TPM_SHORT,
  220. TPM_UNDEFINED,
  221. TPM_UNDEFINED, /* 165 */
  222. TPM_UNDEFINED,
  223. TPM_UNDEFINED,
  224. TPM_UNDEFINED,
  225. TPM_UNDEFINED,
  226. TPM_LONG, /* 170 */
  227. TPM_UNDEFINED,
  228. TPM_UNDEFINED,
  229. TPM_UNDEFINED,
  230. TPM_UNDEFINED,
  231. TPM_UNDEFINED, /* 175 */
  232. TPM_UNDEFINED,
  233. TPM_UNDEFINED,
  234. TPM_UNDEFINED,
  235. TPM_UNDEFINED,
  236. TPM_MEDIUM, /* 180 */
  237. TPM_SHORT,
  238. TPM_MEDIUM,
  239. TPM_MEDIUM,
  240. TPM_MEDIUM,
  241. TPM_MEDIUM, /* 185 */
  242. TPM_SHORT,
  243. TPM_UNDEFINED,
  244. TPM_UNDEFINED,
  245. TPM_UNDEFINED,
  246. TPM_UNDEFINED, /* 190 */
  247. TPM_UNDEFINED,
  248. TPM_UNDEFINED,
  249. TPM_UNDEFINED,
  250. TPM_UNDEFINED,
  251. TPM_UNDEFINED, /* 195 */
  252. TPM_UNDEFINED,
  253. TPM_UNDEFINED,
  254. TPM_UNDEFINED,
  255. TPM_UNDEFINED,
  256. TPM_SHORT, /* 200 */
  257. TPM_UNDEFINED,
  258. TPM_UNDEFINED,
  259. TPM_UNDEFINED,
  260. TPM_SHORT,
  261. TPM_SHORT, /* 205 */
  262. TPM_SHORT,
  263. TPM_SHORT,
  264. TPM_SHORT,
  265. TPM_SHORT,
  266. TPM_MEDIUM, /* 210 */
  267. TPM_UNDEFINED,
  268. TPM_MEDIUM,
  269. TPM_MEDIUM,
  270. TPM_MEDIUM,
  271. TPM_UNDEFINED, /* 215 */
  272. TPM_MEDIUM,
  273. TPM_UNDEFINED,
  274. TPM_UNDEFINED,
  275. TPM_SHORT,
  276. TPM_SHORT, /* 220 */
  277. TPM_SHORT,
  278. TPM_SHORT,
  279. TPM_SHORT,
  280. TPM_SHORT,
  281. TPM_UNDEFINED, /* 225 */
  282. TPM_UNDEFINED,
  283. TPM_UNDEFINED,
  284. TPM_UNDEFINED,
  285. TPM_UNDEFINED,
  286. TPM_SHORT, /* 230 */
  287. TPM_LONG,
  288. TPM_MEDIUM,
  289. TPM_UNDEFINED,
  290. TPM_UNDEFINED,
  291. TPM_UNDEFINED, /* 235 */
  292. TPM_UNDEFINED,
  293. TPM_UNDEFINED,
  294. TPM_UNDEFINED,
  295. TPM_UNDEFINED,
  296. TPM_SHORT, /* 240 */
  297. TPM_UNDEFINED,
  298. TPM_MEDIUM,
  299. };
  300. /*
  301. * Returns max number of jiffies to wait
  302. */
  303. unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
  304. u32 ordinal)
  305. {
  306. int duration_idx = TPM_UNDEFINED;
  307. int duration = 0;
  308. /*
  309. * We only have a duration table for protected commands, where the upper
  310. * 16 bits are 0. For the few other ordinals the fallback will be used.
  311. */
  312. if (ordinal < TPM_MAX_ORDINAL)
  313. duration_idx = tpm_ordinal_duration[ordinal];
  314. if (duration_idx != TPM_UNDEFINED)
  315. duration = chip->duration[duration_idx];
  316. if (duration <= 0)
  317. return 2 * 60 * HZ;
  318. else
  319. return duration;
  320. }
  321. EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
  322. /**
  323. * tmp_transmit - Internal kernel interface to transmit TPM commands.
  324. *
  325. * @chip: TPM chip to use
  326. * @buf: TPM command buffer
  327. * @bufsiz: length of the TPM command buffer
  328. * @flags: tpm transmit flags - bitmap
  329. *
  330. * Return:
  331. * 0 when the operation is successful.
  332. * A negative number for system errors (errno).
  333. */
  334. ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz,
  335. unsigned int flags)
  336. {
  337. ssize_t rc;
  338. u32 count, ordinal;
  339. unsigned long stop;
  340. if (bufsiz < TPM_HEADER_SIZE)
  341. return -EINVAL;
  342. if (bufsiz > TPM_BUFSIZE)
  343. bufsiz = TPM_BUFSIZE;
  344. count = be32_to_cpu(*((__be32 *) (buf + 2)));
  345. ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
  346. if (count == 0)
  347. return -ENODATA;
  348. if (count > bufsiz) {
  349. dev_err(&chip->dev,
  350. "invalid count value %x %zx\n", count, bufsiz);
  351. return -E2BIG;
  352. }
  353. if (!(flags & TPM_TRANSMIT_UNLOCKED))
  354. mutex_lock(&chip->tpm_mutex);
  355. if (chip->dev.parent)
  356. pm_runtime_get_sync(chip->dev.parent);
  357. rc = chip->ops->send(chip, (u8 *) buf, count);
  358. if (rc < 0) {
  359. dev_err(&chip->dev,
  360. "tpm_transmit: tpm_send: error %zd\n", rc);
  361. goto out;
  362. }
  363. if (chip->flags & TPM_CHIP_FLAG_IRQ)
  364. goto out_recv;
  365. if (chip->flags & TPM_CHIP_FLAG_TPM2)
  366. stop = jiffies + tpm2_calc_ordinal_duration(chip, ordinal);
  367. else
  368. stop = jiffies + tpm_calc_ordinal_duration(chip, ordinal);
  369. do {
  370. u8 status = chip->ops->status(chip);
  371. if ((status & chip->ops->req_complete_mask) ==
  372. chip->ops->req_complete_val)
  373. goto out_recv;
  374. if (chip->ops->req_canceled(chip, status)) {
  375. dev_err(&chip->dev, "Operation Canceled\n");
  376. rc = -ECANCELED;
  377. goto out;
  378. }
  379. msleep(TPM_TIMEOUT); /* CHECK */
  380. rmb();
  381. } while (time_before(jiffies, stop));
  382. chip->ops->cancel(chip);
  383. dev_err(&chip->dev, "Operation Timed out\n");
  384. rc = -ETIME;
  385. goto out;
  386. out_recv:
  387. rc = chip->ops->recv(chip, (u8 *) buf, bufsiz);
  388. if (rc < 0)
  389. dev_err(&chip->dev,
  390. "tpm_transmit: tpm_recv: error %zd\n", rc);
  391. out:
  392. if (chip->dev.parent)
  393. pm_runtime_put_sync(chip->dev.parent);
  394. if (!(flags & TPM_TRANSMIT_UNLOCKED))
  395. mutex_unlock(&chip->tpm_mutex);
  396. return rc;
  397. }
  398. /**
  399. * tmp_transmit_cmd - send a tpm command to the device
  400. * The function extracts tpm out header return code
  401. *
  402. * @chip: TPM chip to use
  403. * @buf: TPM command buffer
  404. * @bufsiz: length of the buffer
  405. * @min_rsp_body_length: minimum expected length of response body
  406. * @flags: tpm transmit flags - bitmap
  407. * @desc: command description used in the error message
  408. *
  409. * Return:
  410. * 0 when the operation is successful.
  411. * A negative number for system errors (errno).
  412. * A positive number for a TPM error.
  413. */
  414. ssize_t tpm_transmit_cmd(struct tpm_chip *chip, const void *buf,
  415. size_t bufsiz, size_t min_rsp_body_length,
  416. unsigned int flags, const char *desc)
  417. {
  418. const struct tpm_output_header *header;
  419. int err;
  420. ssize_t len;
  421. len = tpm_transmit(chip, (const u8 *)buf, bufsiz, flags);
  422. if (len < 0)
  423. return len;
  424. else if (len < TPM_HEADER_SIZE)
  425. return -EFAULT;
  426. header = buf;
  427. if (len != be32_to_cpu(header->length))
  428. return -EFAULT;
  429. err = be32_to_cpu(header->return_code);
  430. if (err != 0 && desc)
  431. dev_err(&chip->dev, "A TPM error (%d) occurred %s\n", err,
  432. desc);
  433. if (err)
  434. return err;
  435. if (len < min_rsp_body_length + TPM_HEADER_SIZE)
  436. return -EFAULT;
  437. return 0;
  438. }
  439. #define TPM_DIGEST_SIZE 20
  440. #define TPM_RET_CODE_IDX 6
  441. #define TPM_INTERNAL_RESULT_SIZE 200
  442. #define TPM_ORD_GET_CAP cpu_to_be32(101)
  443. #define TPM_ORD_GET_RANDOM cpu_to_be32(70)
  444. static const struct tpm_input_header tpm_getcap_header = {
  445. .tag = TPM_TAG_RQU_COMMAND,
  446. .length = cpu_to_be32(22),
  447. .ordinal = TPM_ORD_GET_CAP
  448. };
  449. ssize_t tpm_getcap(struct tpm_chip *chip, u32 subcap_id, cap_t *cap,
  450. const char *desc, size_t min_cap_length)
  451. {
  452. struct tpm_cmd_t tpm_cmd;
  453. int rc;
  454. tpm_cmd.header.in = tpm_getcap_header;
  455. if (subcap_id == TPM_CAP_VERSION_1_1 ||
  456. subcap_id == TPM_CAP_VERSION_1_2) {
  457. tpm_cmd.params.getcap_in.cap = cpu_to_be32(subcap_id);
  458. /*subcap field not necessary */
  459. tpm_cmd.params.getcap_in.subcap_size = cpu_to_be32(0);
  460. tpm_cmd.header.in.length -= cpu_to_be32(sizeof(__be32));
  461. } else {
  462. if (subcap_id == TPM_CAP_FLAG_PERM ||
  463. subcap_id == TPM_CAP_FLAG_VOL)
  464. tpm_cmd.params.getcap_in.cap =
  465. cpu_to_be32(TPM_CAP_FLAG);
  466. else
  467. tpm_cmd.params.getcap_in.cap =
  468. cpu_to_be32(TPM_CAP_PROP);
  469. tpm_cmd.params.getcap_in.subcap_size = cpu_to_be32(4);
  470. tpm_cmd.params.getcap_in.subcap = cpu_to_be32(subcap_id);
  471. }
  472. rc = tpm_transmit_cmd(chip, &tpm_cmd, TPM_INTERNAL_RESULT_SIZE,
  473. min_cap_length, 0, desc);
  474. if (!rc)
  475. *cap = tpm_cmd.params.getcap_out.cap;
  476. return rc;
  477. }
  478. EXPORT_SYMBOL_GPL(tpm_getcap);
  479. #define TPM_ORD_STARTUP cpu_to_be32(153)
  480. #define TPM_ST_CLEAR cpu_to_be16(1)
  481. #define TPM_ST_STATE cpu_to_be16(2)
  482. #define TPM_ST_DEACTIVATED cpu_to_be16(3)
  483. static const struct tpm_input_header tpm_startup_header = {
  484. .tag = TPM_TAG_RQU_COMMAND,
  485. .length = cpu_to_be32(12),
  486. .ordinal = TPM_ORD_STARTUP
  487. };
  488. static int tpm_startup(struct tpm_chip *chip, __be16 startup_type)
  489. {
  490. struct tpm_cmd_t start_cmd;
  491. start_cmd.header.in = tpm_startup_header;
  492. start_cmd.params.startup_in.startup_type = startup_type;
  493. return tpm_transmit_cmd(chip, &start_cmd, TPM_INTERNAL_RESULT_SIZE, 0,
  494. 0, "attempting to start the TPM");
  495. }
  496. int tpm_get_timeouts(struct tpm_chip *chip)
  497. {
  498. cap_t cap;
  499. unsigned long timeout_old[4], timeout_chip[4], timeout_eff[4];
  500. ssize_t rc;
  501. if (chip->flags & TPM_CHIP_FLAG_HAVE_TIMEOUTS)
  502. return 0;
  503. if (chip->flags & TPM_CHIP_FLAG_TPM2) {
  504. /* Fixed timeouts for TPM2 */
  505. chip->timeout_a = msecs_to_jiffies(TPM2_TIMEOUT_A);
  506. chip->timeout_b = msecs_to_jiffies(TPM2_TIMEOUT_B);
  507. chip->timeout_c = msecs_to_jiffies(TPM2_TIMEOUT_C);
  508. chip->timeout_d = msecs_to_jiffies(TPM2_TIMEOUT_D);
  509. chip->duration[TPM_SHORT] =
  510. msecs_to_jiffies(TPM2_DURATION_SHORT);
  511. chip->duration[TPM_MEDIUM] =
  512. msecs_to_jiffies(TPM2_DURATION_MEDIUM);
  513. chip->duration[TPM_LONG] =
  514. msecs_to_jiffies(TPM2_DURATION_LONG);
  515. chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS;
  516. return 0;
  517. }
  518. rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap, NULL,
  519. sizeof(cap.timeout));
  520. if (rc == TPM_ERR_INVALID_POSTINIT) {
  521. /* The TPM is not started, we are the first to talk to it.
  522. Execute a startup command. */
  523. dev_info(&chip->dev, "Issuing TPM_STARTUP\n");
  524. if (tpm_startup(chip, TPM_ST_CLEAR))
  525. return rc;
  526. rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_TIMEOUT, &cap,
  527. "attempting to determine the timeouts",
  528. sizeof(cap.timeout));
  529. }
  530. if (rc) {
  531. dev_err(&chip->dev,
  532. "A TPM error (%zd) occurred attempting to determine the timeouts\n",
  533. rc);
  534. return rc;
  535. }
  536. timeout_old[0] = jiffies_to_usecs(chip->timeout_a);
  537. timeout_old[1] = jiffies_to_usecs(chip->timeout_b);
  538. timeout_old[2] = jiffies_to_usecs(chip->timeout_c);
  539. timeout_old[3] = jiffies_to_usecs(chip->timeout_d);
  540. timeout_chip[0] = be32_to_cpu(cap.timeout.a);
  541. timeout_chip[1] = be32_to_cpu(cap.timeout.b);
  542. timeout_chip[2] = be32_to_cpu(cap.timeout.c);
  543. timeout_chip[3] = be32_to_cpu(cap.timeout.d);
  544. memcpy(timeout_eff, timeout_chip, sizeof(timeout_eff));
  545. /*
  546. * Provide ability for vendor overrides of timeout values in case
  547. * of misreporting.
  548. */
  549. if (chip->ops->update_timeouts != NULL)
  550. chip->timeout_adjusted =
  551. chip->ops->update_timeouts(chip, timeout_eff);
  552. if (!chip->timeout_adjusted) {
  553. /* Restore default if chip reported 0 */
  554. int i;
  555. for (i = 0; i < ARRAY_SIZE(timeout_eff); i++) {
  556. if (timeout_eff[i])
  557. continue;
  558. timeout_eff[i] = timeout_old[i];
  559. chip->timeout_adjusted = true;
  560. }
  561. if (timeout_eff[0] != 0 && timeout_eff[0] < 1000) {
  562. /* timeouts in msec rather usec */
  563. for (i = 0; i != ARRAY_SIZE(timeout_eff); i++)
  564. timeout_eff[i] *= 1000;
  565. chip->timeout_adjusted = true;
  566. }
  567. }
  568. /* Report adjusted timeouts */
  569. if (chip->timeout_adjusted) {
  570. dev_info(&chip->dev,
  571. HW_ERR "Adjusting reported timeouts: A %lu->%luus B %lu->%luus C %lu->%luus D %lu->%luus\n",
  572. timeout_chip[0], timeout_eff[0],
  573. timeout_chip[1], timeout_eff[1],
  574. timeout_chip[2], timeout_eff[2],
  575. timeout_chip[3], timeout_eff[3]);
  576. }
  577. chip->timeout_a = usecs_to_jiffies(timeout_eff[0]);
  578. chip->timeout_b = usecs_to_jiffies(timeout_eff[1]);
  579. chip->timeout_c = usecs_to_jiffies(timeout_eff[2]);
  580. chip->timeout_d = usecs_to_jiffies(timeout_eff[3]);
  581. rc = tpm_getcap(chip, TPM_CAP_PROP_TIS_DURATION, &cap,
  582. "attempting to determine the durations",
  583. sizeof(cap.duration));
  584. if (rc)
  585. return rc;
  586. chip->duration[TPM_SHORT] =
  587. usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_short));
  588. chip->duration[TPM_MEDIUM] =
  589. usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_medium));
  590. chip->duration[TPM_LONG] =
  591. usecs_to_jiffies(be32_to_cpu(cap.duration.tpm_long));
  592. /* The Broadcom BCM0102 chipset in a Dell Latitude D820 gets the above
  593. * value wrong and apparently reports msecs rather than usecs. So we
  594. * fix up the resulting too-small TPM_SHORT value to make things work.
  595. * We also scale the TPM_MEDIUM and -_LONG values by 1000.
  596. */
  597. if (chip->duration[TPM_SHORT] < (HZ / 100)) {
  598. chip->duration[TPM_SHORT] = HZ;
  599. chip->duration[TPM_MEDIUM] *= 1000;
  600. chip->duration[TPM_LONG] *= 1000;
  601. chip->duration_adjusted = true;
  602. dev_info(&chip->dev, "Adjusting TPM timeout parameters.");
  603. }
  604. chip->flags |= TPM_CHIP_FLAG_HAVE_TIMEOUTS;
  605. return 0;
  606. }
  607. EXPORT_SYMBOL_GPL(tpm_get_timeouts);
  608. #define TPM_ORD_CONTINUE_SELFTEST 83
  609. #define CONTINUE_SELFTEST_RESULT_SIZE 10
  610. static const struct tpm_input_header continue_selftest_header = {
  611. .tag = TPM_TAG_RQU_COMMAND,
  612. .length = cpu_to_be32(10),
  613. .ordinal = cpu_to_be32(TPM_ORD_CONTINUE_SELFTEST),
  614. };
  615. /**
  616. * tpm_continue_selftest -- run TPM's selftest
  617. * @chip: TPM chip to use
  618. *
  619. * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing
  620. * a TPM error code.
  621. */
  622. static int tpm_continue_selftest(struct tpm_chip *chip)
  623. {
  624. int rc;
  625. struct tpm_cmd_t cmd;
  626. cmd.header.in = continue_selftest_header;
  627. rc = tpm_transmit_cmd(chip, &cmd, CONTINUE_SELFTEST_RESULT_SIZE, 0, 0,
  628. "continue selftest");
  629. return rc;
  630. }
  631. #define TPM_ORDINAL_PCRREAD cpu_to_be32(21)
  632. #define READ_PCR_RESULT_SIZE 30
  633. #define READ_PCR_RESULT_BODY_SIZE 20
  634. static const struct tpm_input_header pcrread_header = {
  635. .tag = TPM_TAG_RQU_COMMAND,
  636. .length = cpu_to_be32(14),
  637. .ordinal = TPM_ORDINAL_PCRREAD
  638. };
  639. int tpm_pcr_read_dev(struct tpm_chip *chip, int pcr_idx, u8 *res_buf)
  640. {
  641. int rc;
  642. struct tpm_cmd_t cmd;
  643. cmd.header.in = pcrread_header;
  644. cmd.params.pcrread_in.pcr_idx = cpu_to_be32(pcr_idx);
  645. rc = tpm_transmit_cmd(chip, &cmd, READ_PCR_RESULT_SIZE,
  646. READ_PCR_RESULT_BODY_SIZE, 0,
  647. "attempting to read a pcr value");
  648. if (rc == 0)
  649. memcpy(res_buf, cmd.params.pcrread_out.pcr_result,
  650. TPM_DIGEST_SIZE);
  651. return rc;
  652. }
  653. /**
  654. * tpm_is_tpm2 - is the chip a TPM2 chip?
  655. * @chip_num: tpm idx # or ANY
  656. *
  657. * Returns < 0 on error, and 1 or 0 on success depending whether the chip
  658. * is a TPM2 chip.
  659. */
  660. int tpm_is_tpm2(u32 chip_num)
  661. {
  662. struct tpm_chip *chip;
  663. int rc;
  664. chip = tpm_chip_find_get(chip_num);
  665. if (chip == NULL)
  666. return -ENODEV;
  667. rc = (chip->flags & TPM_CHIP_FLAG_TPM2) != 0;
  668. tpm_put_ops(chip);
  669. return rc;
  670. }
  671. EXPORT_SYMBOL_GPL(tpm_is_tpm2);
  672. /**
  673. * tpm_pcr_read - read a pcr value
  674. * @chip_num: tpm idx # or ANY
  675. * @pcr_idx: pcr idx to retrieve
  676. * @res_buf: TPM_PCR value
  677. * size of res_buf is 20 bytes (or NULL if you don't care)
  678. *
  679. * The TPM driver should be built-in, but for whatever reason it
  680. * isn't, protect against the chip disappearing, by incrementing
  681. * the module usage count.
  682. */
  683. int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf)
  684. {
  685. struct tpm_chip *chip;
  686. int rc;
  687. chip = tpm_chip_find_get(chip_num);
  688. if (chip == NULL)
  689. return -ENODEV;
  690. if (chip->flags & TPM_CHIP_FLAG_TPM2)
  691. rc = tpm2_pcr_read(chip, pcr_idx, res_buf);
  692. else
  693. rc = tpm_pcr_read_dev(chip, pcr_idx, res_buf);
  694. tpm_put_ops(chip);
  695. return rc;
  696. }
  697. EXPORT_SYMBOL_GPL(tpm_pcr_read);
  698. #define TPM_ORD_PCR_EXTEND cpu_to_be32(20)
  699. #define EXTEND_PCR_RESULT_SIZE 34
  700. #define EXTEND_PCR_RESULT_BODY_SIZE 20
  701. static const struct tpm_input_header pcrextend_header = {
  702. .tag = TPM_TAG_RQU_COMMAND,
  703. .length = cpu_to_be32(34),
  704. .ordinal = TPM_ORD_PCR_EXTEND
  705. };
  706. /**
  707. * tpm_pcr_extend - extend pcr value with hash
  708. * @chip_num: tpm idx # or AN&
  709. * @pcr_idx: pcr idx to extend
  710. * @hash: hash value used to extend pcr value
  711. *
  712. * The TPM driver should be built-in, but for whatever reason it
  713. * isn't, protect against the chip disappearing, by incrementing
  714. * the module usage count.
  715. */
  716. int tpm_pcr_extend(u32 chip_num, int pcr_idx, const u8 *hash)
  717. {
  718. struct tpm_cmd_t cmd;
  719. int rc;
  720. struct tpm_chip *chip;
  721. struct tpm2_digest digest_list[ARRAY_SIZE(chip->active_banks)];
  722. u32 count = 0;
  723. int i;
  724. chip = tpm_chip_find_get(chip_num);
  725. if (chip == NULL)
  726. return -ENODEV;
  727. if (chip->flags & TPM_CHIP_FLAG_TPM2) {
  728. memset(digest_list, 0, sizeof(digest_list));
  729. for (i = 0; i < ARRAY_SIZE(chip->active_banks) &&
  730. chip->active_banks[i] != TPM2_ALG_ERROR; i++) {
  731. digest_list[i].alg_id = chip->active_banks[i];
  732. memcpy(digest_list[i].digest, hash, TPM_DIGEST_SIZE);
  733. count++;
  734. }
  735. rc = tpm2_pcr_extend(chip, pcr_idx, count, digest_list);
  736. tpm_put_ops(chip);
  737. return rc;
  738. }
  739. cmd.header.in = pcrextend_header;
  740. cmd.params.pcrextend_in.pcr_idx = cpu_to_be32(pcr_idx);
  741. memcpy(cmd.params.pcrextend_in.hash, hash, TPM_DIGEST_SIZE);
  742. rc = tpm_transmit_cmd(chip, &cmd, EXTEND_PCR_RESULT_SIZE,
  743. EXTEND_PCR_RESULT_BODY_SIZE, 0,
  744. "attempting extend a PCR value");
  745. tpm_put_ops(chip);
  746. return rc;
  747. }
  748. EXPORT_SYMBOL_GPL(tpm_pcr_extend);
  749. /**
  750. * tpm_do_selftest - have the TPM continue its selftest and wait until it
  751. * can receive further commands
  752. * @chip: TPM chip to use
  753. *
  754. * Returns 0 on success, < 0 in case of fatal error or a value > 0 representing
  755. * a TPM error code.
  756. */
  757. int tpm_do_selftest(struct tpm_chip *chip)
  758. {
  759. int rc;
  760. unsigned int loops;
  761. unsigned int delay_msec = 100;
  762. unsigned long duration;
  763. u8 dummy[TPM_DIGEST_SIZE];
  764. duration = tpm_calc_ordinal_duration(chip, TPM_ORD_CONTINUE_SELFTEST);
  765. loops = jiffies_to_msecs(duration) / delay_msec;
  766. rc = tpm_continue_selftest(chip);
  767. /* This may fail if there was no TPM driver during a suspend/resume
  768. * cycle; some may return 10 (BAD_ORDINAL), others 28 (FAILEDSELFTEST)
  769. */
  770. if (rc)
  771. return rc;
  772. do {
  773. /* Attempt to read a PCR value */
  774. rc = tpm_pcr_read_dev(chip, 0, dummy);
  775. /* Some buggy TPMs will not respond to tpm_tis_ready() for
  776. * around 300ms while the self test is ongoing, keep trying
  777. * until the self test duration expires. */
  778. if (rc == -ETIME) {
  779. dev_info(
  780. &chip->dev, HW_ERR
  781. "TPM command timed out during continue self test");
  782. msleep(delay_msec);
  783. continue;
  784. }
  785. if (rc == TPM_ERR_DISABLED || rc == TPM_ERR_DEACTIVATED) {
  786. dev_info(&chip->dev,
  787. "TPM is disabled/deactivated (0x%X)\n", rc);
  788. /* TPM is disabled and/or deactivated; driver can
  789. * proceed and TPM does handle commands for
  790. * suspend/resume correctly
  791. */
  792. return 0;
  793. }
  794. if (rc != TPM_WARN_DOING_SELFTEST)
  795. return rc;
  796. msleep(delay_msec);
  797. } while (--loops > 0);
  798. return rc;
  799. }
  800. EXPORT_SYMBOL_GPL(tpm_do_selftest);
  801. /**
  802. * tpm1_auto_startup - Perform the standard automatic TPM initialization
  803. * sequence
  804. * @chip: TPM chip to use
  805. *
  806. * Returns 0 on success, < 0 in case of fatal error.
  807. */
  808. int tpm1_auto_startup(struct tpm_chip *chip)
  809. {
  810. int rc;
  811. rc = tpm_get_timeouts(chip);
  812. if (rc)
  813. goto out;
  814. rc = tpm_do_selftest(chip);
  815. if (rc) {
  816. dev_err(&chip->dev, "TPM self test failed\n");
  817. goto out;
  818. }
  819. return rc;
  820. out:
  821. if (rc > 0)
  822. rc = -ENODEV;
  823. return rc;
  824. }
  825. int tpm_send(u32 chip_num, void *cmd, size_t buflen)
  826. {
  827. struct tpm_chip *chip;
  828. int rc;
  829. chip = tpm_chip_find_get(chip_num);
  830. if (chip == NULL)
  831. return -ENODEV;
  832. rc = tpm_transmit_cmd(chip, cmd, buflen, 0, 0, "attempting tpm_cmd");
  833. tpm_put_ops(chip);
  834. return rc;
  835. }
  836. EXPORT_SYMBOL_GPL(tpm_send);
  837. static bool wait_for_tpm_stat_cond(struct tpm_chip *chip, u8 mask,
  838. bool check_cancel, bool *canceled)
  839. {
  840. u8 status = chip->ops->status(chip);
  841. *canceled = false;
  842. if ((status & mask) == mask)
  843. return true;
  844. if (check_cancel && chip->ops->req_canceled(chip, status)) {
  845. *canceled = true;
  846. return true;
  847. }
  848. return false;
  849. }
  850. int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask, unsigned long timeout,
  851. wait_queue_head_t *queue, bool check_cancel)
  852. {
  853. unsigned long stop;
  854. long rc;
  855. u8 status;
  856. bool canceled = false;
  857. /* check current status */
  858. status = chip->ops->status(chip);
  859. if ((status & mask) == mask)
  860. return 0;
  861. stop = jiffies + timeout;
  862. if (chip->flags & TPM_CHIP_FLAG_IRQ) {
  863. again:
  864. timeout = stop - jiffies;
  865. if ((long)timeout <= 0)
  866. return -ETIME;
  867. rc = wait_event_interruptible_timeout(*queue,
  868. wait_for_tpm_stat_cond(chip, mask, check_cancel,
  869. &canceled),
  870. timeout);
  871. if (rc > 0) {
  872. if (canceled)
  873. return -ECANCELED;
  874. return 0;
  875. }
  876. if (rc == -ERESTARTSYS && freezing(current)) {
  877. clear_thread_flag(TIF_SIGPENDING);
  878. goto again;
  879. }
  880. } else {
  881. do {
  882. msleep(TPM_TIMEOUT);
  883. status = chip->ops->status(chip);
  884. if ((status & mask) == mask)
  885. return 0;
  886. } while (time_before(jiffies, stop));
  887. }
  888. return -ETIME;
  889. }
  890. EXPORT_SYMBOL_GPL(wait_for_tpm_stat);
  891. #define TPM_ORD_SAVESTATE cpu_to_be32(152)
  892. #define SAVESTATE_RESULT_SIZE 10
  893. static const struct tpm_input_header savestate_header = {
  894. .tag = TPM_TAG_RQU_COMMAND,
  895. .length = cpu_to_be32(10),
  896. .ordinal = TPM_ORD_SAVESTATE
  897. };
  898. /*
  899. * We are about to suspend. Save the TPM state
  900. * so that it can be restored.
  901. */
  902. int tpm_pm_suspend(struct device *dev)
  903. {
  904. struct tpm_chip *chip = dev_get_drvdata(dev);
  905. struct tpm_cmd_t cmd;
  906. int rc, try;
  907. u8 dummy_hash[TPM_DIGEST_SIZE] = { 0 };
  908. if (chip == NULL)
  909. return -ENODEV;
  910. if (chip->flags & TPM_CHIP_FLAG_TPM2) {
  911. tpm2_shutdown(chip, TPM2_SU_STATE);
  912. return 0;
  913. }
  914. /* for buggy tpm, flush pcrs with extend to selected dummy */
  915. if (tpm_suspend_pcr) {
  916. cmd.header.in = pcrextend_header;
  917. cmd.params.pcrextend_in.pcr_idx = cpu_to_be32(tpm_suspend_pcr);
  918. memcpy(cmd.params.pcrextend_in.hash, dummy_hash,
  919. TPM_DIGEST_SIZE);
  920. rc = tpm_transmit_cmd(chip, &cmd, EXTEND_PCR_RESULT_SIZE,
  921. EXTEND_PCR_RESULT_BODY_SIZE, 0,
  922. "extending dummy pcr before suspend");
  923. }
  924. /* now do the actual savestate */
  925. for (try = 0; try < TPM_RETRY; try++) {
  926. cmd.header.in = savestate_header;
  927. rc = tpm_transmit_cmd(chip, &cmd, SAVESTATE_RESULT_SIZE, 0,
  928. 0, NULL);
  929. /*
  930. * If the TPM indicates that it is too busy to respond to
  931. * this command then retry before giving up. It can take
  932. * several seconds for this TPM to be ready.
  933. *
  934. * This can happen if the TPM has already been sent the
  935. * SaveState command before the driver has loaded. TCG 1.2
  936. * specification states that any communication after SaveState
  937. * may cause the TPM to invalidate previously saved state.
  938. */
  939. if (rc != TPM_WARN_RETRY)
  940. break;
  941. msleep(TPM_TIMEOUT_RETRY);
  942. }
  943. if (rc)
  944. dev_err(&chip->dev,
  945. "Error (%d) sending savestate before suspend\n", rc);
  946. else if (try > 0)
  947. dev_warn(&chip->dev, "TPM savestate took %dms\n",
  948. try * TPM_TIMEOUT_RETRY);
  949. return rc;
  950. }
  951. EXPORT_SYMBOL_GPL(tpm_pm_suspend);
  952. /*
  953. * Resume from a power safe. The BIOS already restored
  954. * the TPM state.
  955. */
  956. int tpm_pm_resume(struct device *dev)
  957. {
  958. struct tpm_chip *chip = dev_get_drvdata(dev);
  959. if (chip == NULL)
  960. return -ENODEV;
  961. return 0;
  962. }
  963. EXPORT_SYMBOL_GPL(tpm_pm_resume);
  964. #define TPM_GETRANDOM_RESULT_SIZE 18
  965. static const struct tpm_input_header tpm_getrandom_header = {
  966. .tag = TPM_TAG_RQU_COMMAND,
  967. .length = cpu_to_be32(14),
  968. .ordinal = TPM_ORD_GET_RANDOM
  969. };
  970. /**
  971. * tpm_get_random() - Get random bytes from the tpm's RNG
  972. * @chip_num: A specific chip number for the request or TPM_ANY_NUM
  973. * @out: destination buffer for the random bytes
  974. * @max: the max number of bytes to write to @out
  975. *
  976. * Returns < 0 on error and the number of bytes read on success
  977. */
  978. int tpm_get_random(u32 chip_num, u8 *out, size_t max)
  979. {
  980. struct tpm_chip *chip;
  981. struct tpm_cmd_t tpm_cmd;
  982. u32 recd, num_bytes = min_t(u32, max, TPM_MAX_RNG_DATA), rlength;
  983. int err, total = 0, retries = 5;
  984. u8 *dest = out;
  985. if (!out || !num_bytes || max > TPM_MAX_RNG_DATA)
  986. return -EINVAL;
  987. chip = tpm_chip_find_get(chip_num);
  988. if (chip == NULL)
  989. return -ENODEV;
  990. if (chip->flags & TPM_CHIP_FLAG_TPM2) {
  991. err = tpm2_get_random(chip, out, max);
  992. tpm_put_ops(chip);
  993. return err;
  994. }
  995. do {
  996. tpm_cmd.header.in = tpm_getrandom_header;
  997. tpm_cmd.params.getrandom_in.num_bytes = cpu_to_be32(num_bytes);
  998. err = tpm_transmit_cmd(chip, &tpm_cmd,
  999. TPM_GETRANDOM_RESULT_SIZE + num_bytes,
  1000. offsetof(struct tpm_getrandom_out,
  1001. rng_data),
  1002. 0, "attempting get random");
  1003. if (err)
  1004. break;
  1005. recd = be32_to_cpu(tpm_cmd.params.getrandom_out.rng_data_len);
  1006. rlength = be32_to_cpu(tpm_cmd.header.out.length);
  1007. if (rlength < offsetof(struct tpm_getrandom_out, rng_data) +
  1008. recd) {
  1009. total = -EFAULT;
  1010. break;
  1011. }
  1012. memcpy(dest, tpm_cmd.params.getrandom_out.rng_data, recd);
  1013. dest += recd;
  1014. total += recd;
  1015. num_bytes -= recd;
  1016. } while (retries-- && total < max);
  1017. tpm_put_ops(chip);
  1018. return total ? total : -EIO;
  1019. }
  1020. EXPORT_SYMBOL_GPL(tpm_get_random);
  1021. /**
  1022. * tpm_seal_trusted() - seal a trusted key
  1023. * @chip_num: A specific chip number for the request or TPM_ANY_NUM
  1024. * @options: authentication values and other options
  1025. * @payload: the key data in clear and encrypted form
  1026. *
  1027. * Returns < 0 on error and 0 on success. At the moment, only TPM 2.0 chips
  1028. * are supported.
  1029. */
  1030. int tpm_seal_trusted(u32 chip_num, struct trusted_key_payload *payload,
  1031. struct trusted_key_options *options)
  1032. {
  1033. struct tpm_chip *chip;
  1034. int rc;
  1035. chip = tpm_chip_find_get(chip_num);
  1036. if (chip == NULL || !(chip->flags & TPM_CHIP_FLAG_TPM2))
  1037. return -ENODEV;
  1038. rc = tpm2_seal_trusted(chip, payload, options);
  1039. tpm_put_ops(chip);
  1040. return rc;
  1041. }
  1042. EXPORT_SYMBOL_GPL(tpm_seal_trusted);
  1043. /**
  1044. * tpm_unseal_trusted() - unseal a trusted key
  1045. * @chip_num: A specific chip number for the request or TPM_ANY_NUM
  1046. * @options: authentication values and other options
  1047. * @payload: the key data in clear and encrypted form
  1048. *
  1049. * Returns < 0 on error and 0 on success. At the moment, only TPM 2.0 chips
  1050. * are supported.
  1051. */
  1052. int tpm_unseal_trusted(u32 chip_num, struct trusted_key_payload *payload,
  1053. struct trusted_key_options *options)
  1054. {
  1055. struct tpm_chip *chip;
  1056. int rc;
  1057. chip = tpm_chip_find_get(chip_num);
  1058. if (chip == NULL || !(chip->flags & TPM_CHIP_FLAG_TPM2))
  1059. return -ENODEV;
  1060. rc = tpm2_unseal_trusted(chip, payload, options);
  1061. tpm_put_ops(chip);
  1062. return rc;
  1063. }
  1064. EXPORT_SYMBOL_GPL(tpm_unseal_trusted);
  1065. static int __init tpm_init(void)
  1066. {
  1067. int rc;
  1068. tpm_class = class_create(THIS_MODULE, "tpm");
  1069. if (IS_ERR(tpm_class)) {
  1070. pr_err("couldn't create tpm class\n");
  1071. return PTR_ERR(tpm_class);
  1072. }
  1073. rc = alloc_chrdev_region(&tpm_devt, 0, TPM_NUM_DEVICES, "tpm");
  1074. if (rc < 0) {
  1075. pr_err("tpm: failed to allocate char dev region\n");
  1076. class_destroy(tpm_class);
  1077. return rc;
  1078. }
  1079. return 0;
  1080. }
  1081. static void __exit tpm_exit(void)
  1082. {
  1083. idr_destroy(&dev_nums_idr);
  1084. class_destroy(tpm_class);
  1085. unregister_chrdev_region(tpm_devt, TPM_NUM_DEVICES);
  1086. }
  1087. subsys_initcall(tpm_init);
  1088. module_exit(tpm_exit);
  1089. MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
  1090. MODULE_DESCRIPTION("TPM Driver");
  1091. MODULE_VERSION("2.0");
  1092. MODULE_LICENSE("GPL");