encrypted.c 27 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2010 IBM Corporation
  4. * Copyright (C) 2010 Politecnico di Torino, Italy
  5. * TORSEC group -- https://security.polito.it
  6. *
  7. * Authors:
  8. * Mimi Zohar <[email protected]>
  9. * Roberto Sassu <[email protected]>
  10. *
  11. * See Documentation/security/keys/trusted-encrypted.rst
  12. */
  13. #include <linux/uaccess.h>
  14. #include <linux/module.h>
  15. #include <linux/init.h>
  16. #include <linux/slab.h>
  17. #include <linux/parser.h>
  18. #include <linux/string.h>
  19. #include <linux/err.h>
  20. #include <keys/user-type.h>
  21. #include <keys/trusted-type.h>
  22. #include <keys/encrypted-type.h>
  23. #include <linux/key-type.h>
  24. #include <linux/random.h>
  25. #include <linux/rcupdate.h>
  26. #include <linux/scatterlist.h>
  27. #include <linux/ctype.h>
  28. #include <crypto/aes.h>
  29. #include <crypto/algapi.h>
  30. #include <crypto/hash.h>
  31. #include <crypto/sha2.h>
  32. #include <crypto/skcipher.h>
  33. #include "encrypted.h"
  34. #include "ecryptfs_format.h"
  35. static const char KEY_TRUSTED_PREFIX[] = "trusted:";
  36. static const char KEY_USER_PREFIX[] = "user:";
  37. static const char hash_alg[] = "sha256";
  38. static const char hmac_alg[] = "hmac(sha256)";
  39. static const char blkcipher_alg[] = "cbc(aes)";
  40. static const char key_format_default[] = "default";
  41. static const char key_format_ecryptfs[] = "ecryptfs";
  42. static const char key_format_enc32[] = "enc32";
  43. static unsigned int ivsize;
  44. static int blksize;
  45. #define KEY_TRUSTED_PREFIX_LEN (sizeof (KEY_TRUSTED_PREFIX) - 1)
  46. #define KEY_USER_PREFIX_LEN (sizeof (KEY_USER_PREFIX) - 1)
  47. #define KEY_ECRYPTFS_DESC_LEN 16
  48. #define HASH_SIZE SHA256_DIGEST_SIZE
  49. #define MAX_DATA_SIZE 4096
  50. #define MIN_DATA_SIZE 20
  51. #define KEY_ENC32_PAYLOAD_LEN 32
  52. static struct crypto_shash *hash_tfm;
  53. enum {
  54. Opt_new, Opt_load, Opt_update, Opt_err
  55. };
  56. enum {
  57. Opt_default, Opt_ecryptfs, Opt_enc32, Opt_error
  58. };
  59. static const match_table_t key_format_tokens = {
  60. {Opt_default, "default"},
  61. {Opt_ecryptfs, "ecryptfs"},
  62. {Opt_enc32, "enc32"},
  63. {Opt_error, NULL}
  64. };
  65. static const match_table_t key_tokens = {
  66. {Opt_new, "new"},
  67. {Opt_load, "load"},
  68. {Opt_update, "update"},
  69. {Opt_err, NULL}
  70. };
  71. static bool user_decrypted_data = IS_ENABLED(CONFIG_USER_DECRYPTED_DATA);
  72. module_param(user_decrypted_data, bool, 0);
  73. MODULE_PARM_DESC(user_decrypted_data,
  74. "Allow instantiation of encrypted keys using provided decrypted data");
  75. static int aes_get_sizes(void)
  76. {
  77. struct crypto_skcipher *tfm;
  78. tfm = crypto_alloc_skcipher(blkcipher_alg, 0, CRYPTO_ALG_ASYNC);
  79. if (IS_ERR(tfm)) {
  80. pr_err("encrypted_key: failed to alloc_cipher (%ld)\n",
  81. PTR_ERR(tfm));
  82. return PTR_ERR(tfm);
  83. }
  84. ivsize = crypto_skcipher_ivsize(tfm);
  85. blksize = crypto_skcipher_blocksize(tfm);
  86. crypto_free_skcipher(tfm);
  87. return 0;
  88. }
  89. /*
  90. * valid_ecryptfs_desc - verify the description of a new/loaded encrypted key
  91. *
  92. * The description of a encrypted key with format 'ecryptfs' must contain
  93. * exactly 16 hexadecimal characters.
  94. *
  95. */
  96. static int valid_ecryptfs_desc(const char *ecryptfs_desc)
  97. {
  98. int i;
  99. if (strlen(ecryptfs_desc) != KEY_ECRYPTFS_DESC_LEN) {
  100. pr_err("encrypted_key: key description must be %d hexadecimal "
  101. "characters long\n", KEY_ECRYPTFS_DESC_LEN);
  102. return -EINVAL;
  103. }
  104. for (i = 0; i < KEY_ECRYPTFS_DESC_LEN; i++) {
  105. if (!isxdigit(ecryptfs_desc[i])) {
  106. pr_err("encrypted_key: key description must contain "
  107. "only hexadecimal characters\n");
  108. return -EINVAL;
  109. }
  110. }
  111. return 0;
  112. }
  113. /*
  114. * valid_master_desc - verify the 'key-type:desc' of a new/updated master-key
  115. *
  116. * key-type:= "trusted:" | "user:"
  117. * desc:= master-key description
  118. *
  119. * Verify that 'key-type' is valid and that 'desc' exists. On key update,
  120. * only the master key description is permitted to change, not the key-type.
  121. * The key-type remains constant.
  122. *
  123. * On success returns 0, otherwise -EINVAL.
  124. */
  125. static int valid_master_desc(const char *new_desc, const char *orig_desc)
  126. {
  127. int prefix_len;
  128. if (!strncmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN))
  129. prefix_len = KEY_TRUSTED_PREFIX_LEN;
  130. else if (!strncmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN))
  131. prefix_len = KEY_USER_PREFIX_LEN;
  132. else
  133. return -EINVAL;
  134. if (!new_desc[prefix_len])
  135. return -EINVAL;
  136. if (orig_desc && strncmp(new_desc, orig_desc, prefix_len))
  137. return -EINVAL;
  138. return 0;
  139. }
  140. /*
  141. * datablob_parse - parse the keyctl data
  142. *
  143. * datablob format:
  144. * new [<format>] <master-key name> <decrypted data length> [<decrypted data>]
  145. * load [<format>] <master-key name> <decrypted data length>
  146. * <encrypted iv + data>
  147. * update <new-master-key name>
  148. *
  149. * Tokenizes a copy of the keyctl data, returning a pointer to each token,
  150. * which is null terminated.
  151. *
  152. * On success returns 0, otherwise -EINVAL.
  153. */
  154. static int datablob_parse(char *datablob, const char **format,
  155. char **master_desc, char **decrypted_datalen,
  156. char **hex_encoded_iv, char **decrypted_data)
  157. {
  158. substring_t args[MAX_OPT_ARGS];
  159. int ret = -EINVAL;
  160. int key_cmd;
  161. int key_format;
  162. char *p, *keyword;
  163. keyword = strsep(&datablob, " \t");
  164. if (!keyword) {
  165. pr_info("encrypted_key: insufficient parameters specified\n");
  166. return ret;
  167. }
  168. key_cmd = match_token(keyword, key_tokens, args);
  169. /* Get optional format: default | ecryptfs */
  170. p = strsep(&datablob, " \t");
  171. if (!p) {
  172. pr_err("encrypted_key: insufficient parameters specified\n");
  173. return ret;
  174. }
  175. key_format = match_token(p, key_format_tokens, args);
  176. switch (key_format) {
  177. case Opt_ecryptfs:
  178. case Opt_enc32:
  179. case Opt_default:
  180. *format = p;
  181. *master_desc = strsep(&datablob, " \t");
  182. break;
  183. case Opt_error:
  184. *master_desc = p;
  185. break;
  186. }
  187. if (!*master_desc) {
  188. pr_info("encrypted_key: master key parameter is missing\n");
  189. goto out;
  190. }
  191. if (valid_master_desc(*master_desc, NULL) < 0) {
  192. pr_info("encrypted_key: master key parameter \'%s\' "
  193. "is invalid\n", *master_desc);
  194. goto out;
  195. }
  196. if (decrypted_datalen) {
  197. *decrypted_datalen = strsep(&datablob, " \t");
  198. if (!*decrypted_datalen) {
  199. pr_info("encrypted_key: keylen parameter is missing\n");
  200. goto out;
  201. }
  202. }
  203. switch (key_cmd) {
  204. case Opt_new:
  205. if (!decrypted_datalen) {
  206. pr_info("encrypted_key: keyword \'%s\' not allowed "
  207. "when called from .update method\n", keyword);
  208. break;
  209. }
  210. *decrypted_data = strsep(&datablob, " \t");
  211. ret = 0;
  212. break;
  213. case Opt_load:
  214. if (!decrypted_datalen) {
  215. pr_info("encrypted_key: keyword \'%s\' not allowed "
  216. "when called from .update method\n", keyword);
  217. break;
  218. }
  219. *hex_encoded_iv = strsep(&datablob, " \t");
  220. if (!*hex_encoded_iv) {
  221. pr_info("encrypted_key: hex blob is missing\n");
  222. break;
  223. }
  224. ret = 0;
  225. break;
  226. case Opt_update:
  227. if (decrypted_datalen) {
  228. pr_info("encrypted_key: keyword \'%s\' not allowed "
  229. "when called from .instantiate method\n",
  230. keyword);
  231. break;
  232. }
  233. ret = 0;
  234. break;
  235. case Opt_err:
  236. pr_info("encrypted_key: keyword \'%s\' not recognized\n",
  237. keyword);
  238. break;
  239. }
  240. out:
  241. return ret;
  242. }
  243. /*
  244. * datablob_format - format as an ascii string, before copying to userspace
  245. */
  246. static char *datablob_format(struct encrypted_key_payload *epayload,
  247. size_t asciiblob_len)
  248. {
  249. char *ascii_buf, *bufp;
  250. u8 *iv = epayload->iv;
  251. int len;
  252. int i;
  253. ascii_buf = kmalloc(asciiblob_len + 1, GFP_KERNEL);
  254. if (!ascii_buf)
  255. goto out;
  256. ascii_buf[asciiblob_len] = '\0';
  257. /* copy datablob master_desc and datalen strings */
  258. len = sprintf(ascii_buf, "%s %s %s ", epayload->format,
  259. epayload->master_desc, epayload->datalen);
  260. /* convert the hex encoded iv, encrypted-data and HMAC to ascii */
  261. bufp = &ascii_buf[len];
  262. for (i = 0; i < (asciiblob_len - len) / 2; i++)
  263. bufp = hex_byte_pack(bufp, iv[i]);
  264. out:
  265. return ascii_buf;
  266. }
  267. /*
  268. * request_user_key - request the user key
  269. *
  270. * Use a user provided key to encrypt/decrypt an encrypted-key.
  271. */
  272. static struct key *request_user_key(const char *master_desc, const u8 **master_key,
  273. size_t *master_keylen)
  274. {
  275. const struct user_key_payload *upayload;
  276. struct key *ukey;
  277. ukey = request_key(&key_type_user, master_desc, NULL);
  278. if (IS_ERR(ukey))
  279. goto error;
  280. down_read(&ukey->sem);
  281. upayload = user_key_payload_locked(ukey);
  282. if (!upayload) {
  283. /* key was revoked before we acquired its semaphore */
  284. up_read(&ukey->sem);
  285. key_put(ukey);
  286. ukey = ERR_PTR(-EKEYREVOKED);
  287. goto error;
  288. }
  289. *master_key = upayload->data;
  290. *master_keylen = upayload->datalen;
  291. error:
  292. return ukey;
  293. }
  294. static int calc_hmac(u8 *digest, const u8 *key, unsigned int keylen,
  295. const u8 *buf, unsigned int buflen)
  296. {
  297. struct crypto_shash *tfm;
  298. int err;
  299. tfm = crypto_alloc_shash(hmac_alg, 0, 0);
  300. if (IS_ERR(tfm)) {
  301. pr_err("encrypted_key: can't alloc %s transform: %ld\n",
  302. hmac_alg, PTR_ERR(tfm));
  303. return PTR_ERR(tfm);
  304. }
  305. err = crypto_shash_setkey(tfm, key, keylen);
  306. if (!err)
  307. err = crypto_shash_tfm_digest(tfm, buf, buflen, digest);
  308. crypto_free_shash(tfm);
  309. return err;
  310. }
  311. enum derived_key_type { ENC_KEY, AUTH_KEY };
  312. /* Derive authentication/encryption key from trusted key */
  313. static int get_derived_key(u8 *derived_key, enum derived_key_type key_type,
  314. const u8 *master_key, size_t master_keylen)
  315. {
  316. u8 *derived_buf;
  317. unsigned int derived_buf_len;
  318. int ret;
  319. derived_buf_len = strlen("AUTH_KEY") + 1 + master_keylen;
  320. if (derived_buf_len < HASH_SIZE)
  321. derived_buf_len = HASH_SIZE;
  322. derived_buf = kzalloc(derived_buf_len, GFP_KERNEL);
  323. if (!derived_buf)
  324. return -ENOMEM;
  325. if (key_type)
  326. strcpy(derived_buf, "AUTH_KEY");
  327. else
  328. strcpy(derived_buf, "ENC_KEY");
  329. memcpy(derived_buf + strlen(derived_buf) + 1, master_key,
  330. master_keylen);
  331. ret = crypto_shash_tfm_digest(hash_tfm, derived_buf, derived_buf_len,
  332. derived_key);
  333. kfree_sensitive(derived_buf);
  334. return ret;
  335. }
  336. static struct skcipher_request *init_skcipher_req(const u8 *key,
  337. unsigned int key_len)
  338. {
  339. struct skcipher_request *req;
  340. struct crypto_skcipher *tfm;
  341. int ret;
  342. tfm = crypto_alloc_skcipher(blkcipher_alg, 0, CRYPTO_ALG_ASYNC);
  343. if (IS_ERR(tfm)) {
  344. pr_err("encrypted_key: failed to load %s transform (%ld)\n",
  345. blkcipher_alg, PTR_ERR(tfm));
  346. return ERR_CAST(tfm);
  347. }
  348. ret = crypto_skcipher_setkey(tfm, key, key_len);
  349. if (ret < 0) {
  350. pr_err("encrypted_key: failed to setkey (%d)\n", ret);
  351. crypto_free_skcipher(tfm);
  352. return ERR_PTR(ret);
  353. }
  354. req = skcipher_request_alloc(tfm, GFP_KERNEL);
  355. if (!req) {
  356. pr_err("encrypted_key: failed to allocate request for %s\n",
  357. blkcipher_alg);
  358. crypto_free_skcipher(tfm);
  359. return ERR_PTR(-ENOMEM);
  360. }
  361. skcipher_request_set_callback(req, 0, NULL, NULL);
  362. return req;
  363. }
  364. static struct key *request_master_key(struct encrypted_key_payload *epayload,
  365. const u8 **master_key, size_t *master_keylen)
  366. {
  367. struct key *mkey = ERR_PTR(-EINVAL);
  368. if (!strncmp(epayload->master_desc, KEY_TRUSTED_PREFIX,
  369. KEY_TRUSTED_PREFIX_LEN)) {
  370. mkey = request_trusted_key(epayload->master_desc +
  371. KEY_TRUSTED_PREFIX_LEN,
  372. master_key, master_keylen);
  373. } else if (!strncmp(epayload->master_desc, KEY_USER_PREFIX,
  374. KEY_USER_PREFIX_LEN)) {
  375. mkey = request_user_key(epayload->master_desc +
  376. KEY_USER_PREFIX_LEN,
  377. master_key, master_keylen);
  378. } else
  379. goto out;
  380. if (IS_ERR(mkey)) {
  381. int ret = PTR_ERR(mkey);
  382. if (ret == -ENOTSUPP)
  383. pr_info("encrypted_key: key %s not supported",
  384. epayload->master_desc);
  385. else
  386. pr_info("encrypted_key: key %s not found",
  387. epayload->master_desc);
  388. goto out;
  389. }
  390. dump_master_key(*master_key, *master_keylen);
  391. out:
  392. return mkey;
  393. }
  394. /* Before returning data to userspace, encrypt decrypted data. */
  395. static int derived_key_encrypt(struct encrypted_key_payload *epayload,
  396. const u8 *derived_key,
  397. unsigned int derived_keylen)
  398. {
  399. struct scatterlist sg_in[2];
  400. struct scatterlist sg_out[1];
  401. struct crypto_skcipher *tfm;
  402. struct skcipher_request *req;
  403. unsigned int encrypted_datalen;
  404. u8 iv[AES_BLOCK_SIZE];
  405. int ret;
  406. encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
  407. req = init_skcipher_req(derived_key, derived_keylen);
  408. ret = PTR_ERR(req);
  409. if (IS_ERR(req))
  410. goto out;
  411. dump_decrypted_data(epayload);
  412. sg_init_table(sg_in, 2);
  413. sg_set_buf(&sg_in[0], epayload->decrypted_data,
  414. epayload->decrypted_datalen);
  415. sg_set_page(&sg_in[1], ZERO_PAGE(0), AES_BLOCK_SIZE, 0);
  416. sg_init_table(sg_out, 1);
  417. sg_set_buf(sg_out, epayload->encrypted_data, encrypted_datalen);
  418. memcpy(iv, epayload->iv, sizeof(iv));
  419. skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv);
  420. ret = crypto_skcipher_encrypt(req);
  421. tfm = crypto_skcipher_reqtfm(req);
  422. skcipher_request_free(req);
  423. crypto_free_skcipher(tfm);
  424. if (ret < 0)
  425. pr_err("encrypted_key: failed to encrypt (%d)\n", ret);
  426. else
  427. dump_encrypted_data(epayload, encrypted_datalen);
  428. out:
  429. return ret;
  430. }
  431. static int datablob_hmac_append(struct encrypted_key_payload *epayload,
  432. const u8 *master_key, size_t master_keylen)
  433. {
  434. u8 derived_key[HASH_SIZE];
  435. u8 *digest;
  436. int ret;
  437. ret = get_derived_key(derived_key, AUTH_KEY, master_key, master_keylen);
  438. if (ret < 0)
  439. goto out;
  440. digest = epayload->format + epayload->datablob_len;
  441. ret = calc_hmac(digest, derived_key, sizeof derived_key,
  442. epayload->format, epayload->datablob_len);
  443. if (!ret)
  444. dump_hmac(NULL, digest, HASH_SIZE);
  445. out:
  446. memzero_explicit(derived_key, sizeof(derived_key));
  447. return ret;
  448. }
  449. /* verify HMAC before decrypting encrypted key */
  450. static int datablob_hmac_verify(struct encrypted_key_payload *epayload,
  451. const u8 *format, const u8 *master_key,
  452. size_t master_keylen)
  453. {
  454. u8 derived_key[HASH_SIZE];
  455. u8 digest[HASH_SIZE];
  456. int ret;
  457. char *p;
  458. unsigned short len;
  459. ret = get_derived_key(derived_key, AUTH_KEY, master_key, master_keylen);
  460. if (ret < 0)
  461. goto out;
  462. len = epayload->datablob_len;
  463. if (!format) {
  464. p = epayload->master_desc;
  465. len -= strlen(epayload->format) + 1;
  466. } else
  467. p = epayload->format;
  468. ret = calc_hmac(digest, derived_key, sizeof derived_key, p, len);
  469. if (ret < 0)
  470. goto out;
  471. ret = crypto_memneq(digest, epayload->format + epayload->datablob_len,
  472. sizeof(digest));
  473. if (ret) {
  474. ret = -EINVAL;
  475. dump_hmac("datablob",
  476. epayload->format + epayload->datablob_len,
  477. HASH_SIZE);
  478. dump_hmac("calc", digest, HASH_SIZE);
  479. }
  480. out:
  481. memzero_explicit(derived_key, sizeof(derived_key));
  482. return ret;
  483. }
  484. static int derived_key_decrypt(struct encrypted_key_payload *epayload,
  485. const u8 *derived_key,
  486. unsigned int derived_keylen)
  487. {
  488. struct scatterlist sg_in[1];
  489. struct scatterlist sg_out[2];
  490. struct crypto_skcipher *tfm;
  491. struct skcipher_request *req;
  492. unsigned int encrypted_datalen;
  493. u8 iv[AES_BLOCK_SIZE];
  494. u8 *pad;
  495. int ret;
  496. /* Throwaway buffer to hold the unused zero padding at the end */
  497. pad = kmalloc(AES_BLOCK_SIZE, GFP_KERNEL);
  498. if (!pad)
  499. return -ENOMEM;
  500. encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
  501. req = init_skcipher_req(derived_key, derived_keylen);
  502. ret = PTR_ERR(req);
  503. if (IS_ERR(req))
  504. goto out;
  505. dump_encrypted_data(epayload, encrypted_datalen);
  506. sg_init_table(sg_in, 1);
  507. sg_init_table(sg_out, 2);
  508. sg_set_buf(sg_in, epayload->encrypted_data, encrypted_datalen);
  509. sg_set_buf(&sg_out[0], epayload->decrypted_data,
  510. epayload->decrypted_datalen);
  511. sg_set_buf(&sg_out[1], pad, AES_BLOCK_SIZE);
  512. memcpy(iv, epayload->iv, sizeof(iv));
  513. skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv);
  514. ret = crypto_skcipher_decrypt(req);
  515. tfm = crypto_skcipher_reqtfm(req);
  516. skcipher_request_free(req);
  517. crypto_free_skcipher(tfm);
  518. if (ret < 0)
  519. goto out;
  520. dump_decrypted_data(epayload);
  521. out:
  522. kfree(pad);
  523. return ret;
  524. }
  525. /* Allocate memory for decrypted key and datablob. */
  526. static struct encrypted_key_payload *encrypted_key_alloc(struct key *key,
  527. const char *format,
  528. const char *master_desc,
  529. const char *datalen,
  530. const char *decrypted_data)
  531. {
  532. struct encrypted_key_payload *epayload = NULL;
  533. unsigned short datablob_len;
  534. unsigned short decrypted_datalen;
  535. unsigned short payload_datalen;
  536. unsigned int encrypted_datalen;
  537. unsigned int format_len;
  538. long dlen;
  539. int i;
  540. int ret;
  541. ret = kstrtol(datalen, 10, &dlen);
  542. if (ret < 0 || dlen < MIN_DATA_SIZE || dlen > MAX_DATA_SIZE)
  543. return ERR_PTR(-EINVAL);
  544. format_len = (!format) ? strlen(key_format_default) : strlen(format);
  545. decrypted_datalen = dlen;
  546. payload_datalen = decrypted_datalen;
  547. if (decrypted_data) {
  548. if (!user_decrypted_data) {
  549. pr_err("encrypted key: instantiation of keys using provided decrypted data is disabled since CONFIG_USER_DECRYPTED_DATA is set to false\n");
  550. return ERR_PTR(-EINVAL);
  551. }
  552. if (strlen(decrypted_data) != decrypted_datalen * 2) {
  553. pr_err("encrypted key: decrypted data provided does not match decrypted data length provided\n");
  554. return ERR_PTR(-EINVAL);
  555. }
  556. for (i = 0; i < strlen(decrypted_data); i++) {
  557. if (!isxdigit(decrypted_data[i])) {
  558. pr_err("encrypted key: decrypted data provided must contain only hexadecimal characters\n");
  559. return ERR_PTR(-EINVAL);
  560. }
  561. }
  562. }
  563. if (format) {
  564. if (!strcmp(format, key_format_ecryptfs)) {
  565. if (dlen != ECRYPTFS_MAX_KEY_BYTES) {
  566. pr_err("encrypted_key: keylen for the ecryptfs format must be equal to %d bytes\n",
  567. ECRYPTFS_MAX_KEY_BYTES);
  568. return ERR_PTR(-EINVAL);
  569. }
  570. decrypted_datalen = ECRYPTFS_MAX_KEY_BYTES;
  571. payload_datalen = sizeof(struct ecryptfs_auth_tok);
  572. } else if (!strcmp(format, key_format_enc32)) {
  573. if (decrypted_datalen != KEY_ENC32_PAYLOAD_LEN) {
  574. pr_err("encrypted_key: enc32 key payload incorrect length: %d\n",
  575. decrypted_datalen);
  576. return ERR_PTR(-EINVAL);
  577. }
  578. }
  579. }
  580. encrypted_datalen = roundup(decrypted_datalen, blksize);
  581. datablob_len = format_len + 1 + strlen(master_desc) + 1
  582. + strlen(datalen) + 1 + ivsize + 1 + encrypted_datalen;
  583. ret = key_payload_reserve(key, payload_datalen + datablob_len
  584. + HASH_SIZE + 1);
  585. if (ret < 0)
  586. return ERR_PTR(ret);
  587. epayload = kzalloc(sizeof(*epayload) + payload_datalen +
  588. datablob_len + HASH_SIZE + 1, GFP_KERNEL);
  589. if (!epayload)
  590. return ERR_PTR(-ENOMEM);
  591. epayload->payload_datalen = payload_datalen;
  592. epayload->decrypted_datalen = decrypted_datalen;
  593. epayload->datablob_len = datablob_len;
  594. return epayload;
  595. }
  596. static int encrypted_key_decrypt(struct encrypted_key_payload *epayload,
  597. const char *format, const char *hex_encoded_iv)
  598. {
  599. struct key *mkey;
  600. u8 derived_key[HASH_SIZE];
  601. const u8 *master_key;
  602. u8 *hmac;
  603. const char *hex_encoded_data;
  604. unsigned int encrypted_datalen;
  605. size_t master_keylen;
  606. size_t asciilen;
  607. int ret;
  608. encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
  609. asciilen = (ivsize + 1 + encrypted_datalen + HASH_SIZE) * 2;
  610. if (strlen(hex_encoded_iv) != asciilen)
  611. return -EINVAL;
  612. hex_encoded_data = hex_encoded_iv + (2 * ivsize) + 2;
  613. ret = hex2bin(epayload->iv, hex_encoded_iv, ivsize);
  614. if (ret < 0)
  615. return -EINVAL;
  616. ret = hex2bin(epayload->encrypted_data, hex_encoded_data,
  617. encrypted_datalen);
  618. if (ret < 0)
  619. return -EINVAL;
  620. hmac = epayload->format + epayload->datablob_len;
  621. ret = hex2bin(hmac, hex_encoded_data + (encrypted_datalen * 2),
  622. HASH_SIZE);
  623. if (ret < 0)
  624. return -EINVAL;
  625. mkey = request_master_key(epayload, &master_key, &master_keylen);
  626. if (IS_ERR(mkey))
  627. return PTR_ERR(mkey);
  628. ret = datablob_hmac_verify(epayload, format, master_key, master_keylen);
  629. if (ret < 0) {
  630. pr_err("encrypted_key: bad hmac (%d)\n", ret);
  631. goto out;
  632. }
  633. ret = get_derived_key(derived_key, ENC_KEY, master_key, master_keylen);
  634. if (ret < 0)
  635. goto out;
  636. ret = derived_key_decrypt(epayload, derived_key, sizeof derived_key);
  637. if (ret < 0)
  638. pr_err("encrypted_key: failed to decrypt key (%d)\n", ret);
  639. out:
  640. up_read(&mkey->sem);
  641. key_put(mkey);
  642. memzero_explicit(derived_key, sizeof(derived_key));
  643. return ret;
  644. }
  645. static void __ekey_init(struct encrypted_key_payload *epayload,
  646. const char *format, const char *master_desc,
  647. const char *datalen)
  648. {
  649. unsigned int format_len;
  650. format_len = (!format) ? strlen(key_format_default) : strlen(format);
  651. epayload->format = epayload->payload_data + epayload->payload_datalen;
  652. epayload->master_desc = epayload->format + format_len + 1;
  653. epayload->datalen = epayload->master_desc + strlen(master_desc) + 1;
  654. epayload->iv = epayload->datalen + strlen(datalen) + 1;
  655. epayload->encrypted_data = epayload->iv + ivsize + 1;
  656. epayload->decrypted_data = epayload->payload_data;
  657. if (!format)
  658. memcpy(epayload->format, key_format_default, format_len);
  659. else {
  660. if (!strcmp(format, key_format_ecryptfs))
  661. epayload->decrypted_data =
  662. ecryptfs_get_auth_tok_key((struct ecryptfs_auth_tok *)epayload->payload_data);
  663. memcpy(epayload->format, format, format_len);
  664. }
  665. memcpy(epayload->master_desc, master_desc, strlen(master_desc));
  666. memcpy(epayload->datalen, datalen, strlen(datalen));
  667. }
  668. /*
  669. * encrypted_init - initialize an encrypted key
  670. *
  671. * For a new key, use either a random number or user-provided decrypted data in
  672. * case it is provided. A random number is used for the iv in both cases. For
  673. * an old key, decrypt the hex encoded data.
  674. */
  675. static int encrypted_init(struct encrypted_key_payload *epayload,
  676. const char *key_desc, const char *format,
  677. const char *master_desc, const char *datalen,
  678. const char *hex_encoded_iv, const char *decrypted_data)
  679. {
  680. int ret = 0;
  681. if (format && !strcmp(format, key_format_ecryptfs)) {
  682. ret = valid_ecryptfs_desc(key_desc);
  683. if (ret < 0)
  684. return ret;
  685. ecryptfs_fill_auth_tok((struct ecryptfs_auth_tok *)epayload->payload_data,
  686. key_desc);
  687. }
  688. __ekey_init(epayload, format, master_desc, datalen);
  689. if (hex_encoded_iv) {
  690. ret = encrypted_key_decrypt(epayload, format, hex_encoded_iv);
  691. } else if (decrypted_data) {
  692. get_random_bytes(epayload->iv, ivsize);
  693. ret = hex2bin(epayload->decrypted_data, decrypted_data,
  694. epayload->decrypted_datalen);
  695. } else {
  696. get_random_bytes(epayload->iv, ivsize);
  697. get_random_bytes(epayload->decrypted_data, epayload->decrypted_datalen);
  698. }
  699. return ret;
  700. }
  701. /*
  702. * encrypted_instantiate - instantiate an encrypted key
  703. *
  704. * Instantiates the key:
  705. * - by decrypting an existing encrypted datablob, or
  706. * - by creating a new encrypted key based on a kernel random number, or
  707. * - using provided decrypted data.
  708. *
  709. * On success, return 0. Otherwise return errno.
  710. */
  711. static int encrypted_instantiate(struct key *key,
  712. struct key_preparsed_payload *prep)
  713. {
  714. struct encrypted_key_payload *epayload = NULL;
  715. char *datablob = NULL;
  716. const char *format = NULL;
  717. char *master_desc = NULL;
  718. char *decrypted_datalen = NULL;
  719. char *hex_encoded_iv = NULL;
  720. char *decrypted_data = NULL;
  721. size_t datalen = prep->datalen;
  722. int ret;
  723. if (datalen <= 0 || datalen > 32767 || !prep->data)
  724. return -EINVAL;
  725. datablob = kmalloc(datalen + 1, GFP_KERNEL);
  726. if (!datablob)
  727. return -ENOMEM;
  728. datablob[datalen] = 0;
  729. memcpy(datablob, prep->data, datalen);
  730. ret = datablob_parse(datablob, &format, &master_desc,
  731. &decrypted_datalen, &hex_encoded_iv, &decrypted_data);
  732. if (ret < 0)
  733. goto out;
  734. epayload = encrypted_key_alloc(key, format, master_desc,
  735. decrypted_datalen, decrypted_data);
  736. if (IS_ERR(epayload)) {
  737. ret = PTR_ERR(epayload);
  738. goto out;
  739. }
  740. ret = encrypted_init(epayload, key->description, format, master_desc,
  741. decrypted_datalen, hex_encoded_iv, decrypted_data);
  742. if (ret < 0) {
  743. kfree_sensitive(epayload);
  744. goto out;
  745. }
  746. rcu_assign_keypointer(key, epayload);
  747. out:
  748. kfree_sensitive(datablob);
  749. return ret;
  750. }
  751. static void encrypted_rcu_free(struct rcu_head *rcu)
  752. {
  753. struct encrypted_key_payload *epayload;
  754. epayload = container_of(rcu, struct encrypted_key_payload, rcu);
  755. kfree_sensitive(epayload);
  756. }
  757. /*
  758. * encrypted_update - update the master key description
  759. *
  760. * Change the master key description for an existing encrypted key.
  761. * The next read will return an encrypted datablob using the new
  762. * master key description.
  763. *
  764. * On success, return 0. Otherwise return errno.
  765. */
  766. static int encrypted_update(struct key *key, struct key_preparsed_payload *prep)
  767. {
  768. struct encrypted_key_payload *epayload = key->payload.data[0];
  769. struct encrypted_key_payload *new_epayload;
  770. char *buf;
  771. char *new_master_desc = NULL;
  772. const char *format = NULL;
  773. size_t datalen = prep->datalen;
  774. int ret = 0;
  775. if (key_is_negative(key))
  776. return -ENOKEY;
  777. if (datalen <= 0 || datalen > 32767 || !prep->data)
  778. return -EINVAL;
  779. buf = kmalloc(datalen + 1, GFP_KERNEL);
  780. if (!buf)
  781. return -ENOMEM;
  782. buf[datalen] = 0;
  783. memcpy(buf, prep->data, datalen);
  784. ret = datablob_parse(buf, &format, &new_master_desc, NULL, NULL, NULL);
  785. if (ret < 0)
  786. goto out;
  787. ret = valid_master_desc(new_master_desc, epayload->master_desc);
  788. if (ret < 0)
  789. goto out;
  790. new_epayload = encrypted_key_alloc(key, epayload->format,
  791. new_master_desc, epayload->datalen, NULL);
  792. if (IS_ERR(new_epayload)) {
  793. ret = PTR_ERR(new_epayload);
  794. goto out;
  795. }
  796. __ekey_init(new_epayload, epayload->format, new_master_desc,
  797. epayload->datalen);
  798. memcpy(new_epayload->iv, epayload->iv, ivsize);
  799. memcpy(new_epayload->payload_data, epayload->payload_data,
  800. epayload->payload_datalen);
  801. rcu_assign_keypointer(key, new_epayload);
  802. call_rcu(&epayload->rcu, encrypted_rcu_free);
  803. out:
  804. kfree_sensitive(buf);
  805. return ret;
  806. }
  807. /*
  808. * encrypted_read - format and copy out the encrypted data
  809. *
  810. * The resulting datablob format is:
  811. * <master-key name> <decrypted data length> <encrypted iv> <encrypted data>
  812. *
  813. * On success, return to userspace the encrypted key datablob size.
  814. */
  815. static long encrypted_read(const struct key *key, char *buffer,
  816. size_t buflen)
  817. {
  818. struct encrypted_key_payload *epayload;
  819. struct key *mkey;
  820. const u8 *master_key;
  821. size_t master_keylen;
  822. char derived_key[HASH_SIZE];
  823. char *ascii_buf;
  824. size_t asciiblob_len;
  825. int ret;
  826. epayload = dereference_key_locked(key);
  827. /* returns the hex encoded iv, encrypted-data, and hmac as ascii */
  828. asciiblob_len = epayload->datablob_len + ivsize + 1
  829. + roundup(epayload->decrypted_datalen, blksize)
  830. + (HASH_SIZE * 2);
  831. if (!buffer || buflen < asciiblob_len)
  832. return asciiblob_len;
  833. mkey = request_master_key(epayload, &master_key, &master_keylen);
  834. if (IS_ERR(mkey))
  835. return PTR_ERR(mkey);
  836. ret = get_derived_key(derived_key, ENC_KEY, master_key, master_keylen);
  837. if (ret < 0)
  838. goto out;
  839. ret = derived_key_encrypt(epayload, derived_key, sizeof derived_key);
  840. if (ret < 0)
  841. goto out;
  842. ret = datablob_hmac_append(epayload, master_key, master_keylen);
  843. if (ret < 0)
  844. goto out;
  845. ascii_buf = datablob_format(epayload, asciiblob_len);
  846. if (!ascii_buf) {
  847. ret = -ENOMEM;
  848. goto out;
  849. }
  850. up_read(&mkey->sem);
  851. key_put(mkey);
  852. memzero_explicit(derived_key, sizeof(derived_key));
  853. memcpy(buffer, ascii_buf, asciiblob_len);
  854. kfree_sensitive(ascii_buf);
  855. return asciiblob_len;
  856. out:
  857. up_read(&mkey->sem);
  858. key_put(mkey);
  859. memzero_explicit(derived_key, sizeof(derived_key));
  860. return ret;
  861. }
  862. /*
  863. * encrypted_destroy - clear and free the key's payload
  864. */
  865. static void encrypted_destroy(struct key *key)
  866. {
  867. kfree_sensitive(key->payload.data[0]);
  868. }
  869. struct key_type key_type_encrypted = {
  870. .name = "encrypted",
  871. .instantiate = encrypted_instantiate,
  872. .update = encrypted_update,
  873. .destroy = encrypted_destroy,
  874. .describe = user_describe,
  875. .read = encrypted_read,
  876. };
  877. EXPORT_SYMBOL_GPL(key_type_encrypted);
  878. static int __init init_encrypted(void)
  879. {
  880. int ret;
  881. hash_tfm = crypto_alloc_shash(hash_alg, 0, 0);
  882. if (IS_ERR(hash_tfm)) {
  883. pr_err("encrypted_key: can't allocate %s transform: %ld\n",
  884. hash_alg, PTR_ERR(hash_tfm));
  885. return PTR_ERR(hash_tfm);
  886. }
  887. ret = aes_get_sizes();
  888. if (ret < 0)
  889. goto out;
  890. ret = register_key_type(&key_type_encrypted);
  891. if (ret < 0)
  892. goto out;
  893. return 0;
  894. out:
  895. crypto_free_shash(hash_tfm);
  896. return ret;
  897. }
  898. static void __exit cleanup_encrypted(void)
  899. {
  900. crypto_free_shash(hash_tfm);
  901. unregister_key_type(&key_type_encrypted);
  902. }
  903. late_initcall(init_encrypted);
  904. module_exit(cleanup_encrypted);
  905. MODULE_LICENSE("GPL");