security.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Copyright(c) 2018 Intel Corporation. All rights reserved. */
  3. #include <linux/module.h>
  4. #include <linux/device.h>
  5. #include <linux/ndctl.h>
  6. #include <linux/slab.h>
  7. #include <linux/io.h>
  8. #include <linux/mm.h>
  9. #include <linux/cred.h>
  10. #include <linux/key.h>
  11. #include <linux/key-type.h>
  12. #include <keys/user-type.h>
  13. #include <keys/encrypted-type.h>
  14. #include "nd-core.h"
  15. #include "nd.h"
  16. #define NVDIMM_BASE_KEY 0
  17. #define NVDIMM_NEW_KEY 1
  18. static bool key_revalidate = true;
  19. module_param(key_revalidate, bool, 0444);
  20. MODULE_PARM_DESC(key_revalidate, "Require key validation at init.");
  21. static const char zero_key[NVDIMM_PASSPHRASE_LEN];
  22. static void *key_data(struct key *key)
  23. {
  24. struct encrypted_key_payload *epayload = dereference_key_locked(key);
  25. lockdep_assert_held_read(&key->sem);
  26. return epayload->decrypted_data;
  27. }
  28. static void nvdimm_put_key(struct key *key)
  29. {
  30. if (!key)
  31. return;
  32. up_read(&key->sem);
  33. key_put(key);
  34. }
  35. /*
  36. * Retrieve kernel key for DIMM and request from user space if
  37. * necessary. Returns a key held for read and must be put by
  38. * nvdimm_put_key() before the usage goes out of scope.
  39. */
  40. static struct key *nvdimm_request_key(struct nvdimm *nvdimm)
  41. {
  42. struct key *key = NULL;
  43. static const char NVDIMM_PREFIX[] = "nvdimm:";
  44. char desc[NVDIMM_KEY_DESC_LEN + sizeof(NVDIMM_PREFIX)];
  45. struct device *dev = &nvdimm->dev;
  46. sprintf(desc, "%s%s", NVDIMM_PREFIX, nvdimm->dimm_id);
  47. key = request_key(&key_type_encrypted, desc, "");
  48. if (IS_ERR(key)) {
  49. if (PTR_ERR(key) == -ENOKEY)
  50. dev_dbg(dev, "request_key() found no key\n");
  51. else
  52. dev_dbg(dev, "request_key() upcall failed\n");
  53. key = NULL;
  54. } else {
  55. struct encrypted_key_payload *epayload;
  56. down_read(&key->sem);
  57. epayload = dereference_key_locked(key);
  58. if (epayload->decrypted_datalen != NVDIMM_PASSPHRASE_LEN) {
  59. up_read(&key->sem);
  60. key_put(key);
  61. key = NULL;
  62. }
  63. }
  64. return key;
  65. }
  66. static const void *nvdimm_get_key_payload(struct nvdimm *nvdimm,
  67. struct key **key)
  68. {
  69. *key = nvdimm_request_key(nvdimm);
  70. if (!*key)
  71. return zero_key;
  72. return key_data(*key);
  73. }
  74. static struct key *nvdimm_lookup_user_key(struct nvdimm *nvdimm,
  75. key_serial_t id, int subclass)
  76. {
  77. key_ref_t keyref;
  78. struct key *key;
  79. struct encrypted_key_payload *epayload;
  80. struct device *dev = &nvdimm->dev;
  81. keyref = lookup_user_key(id, 0, KEY_NEED_SEARCH);
  82. if (IS_ERR(keyref))
  83. return NULL;
  84. key = key_ref_to_ptr(keyref);
  85. if (key->type != &key_type_encrypted) {
  86. key_put(key);
  87. return NULL;
  88. }
  89. dev_dbg(dev, "%s: key found: %#x\n", __func__, key_serial(key));
  90. down_read_nested(&key->sem, subclass);
  91. epayload = dereference_key_locked(key);
  92. if (epayload->decrypted_datalen != NVDIMM_PASSPHRASE_LEN) {
  93. up_read(&key->sem);
  94. key_put(key);
  95. key = NULL;
  96. }
  97. return key;
  98. }
  99. static const void *nvdimm_get_user_key_payload(struct nvdimm *nvdimm,
  100. key_serial_t id, int subclass, struct key **key)
  101. {
  102. *key = NULL;
  103. if (id == 0) {
  104. if (subclass == NVDIMM_BASE_KEY)
  105. return zero_key;
  106. else
  107. return NULL;
  108. }
  109. *key = nvdimm_lookup_user_key(nvdimm, id, subclass);
  110. if (!*key)
  111. return NULL;
  112. return key_data(*key);
  113. }
  114. static int nvdimm_key_revalidate(struct nvdimm *nvdimm)
  115. {
  116. struct key *key;
  117. int rc;
  118. const void *data;
  119. if (!nvdimm->sec.ops->change_key)
  120. return -EOPNOTSUPP;
  121. data = nvdimm_get_key_payload(nvdimm, &key);
  122. /*
  123. * Send the same key to the hardware as new and old key to
  124. * verify that the key is good.
  125. */
  126. rc = nvdimm->sec.ops->change_key(nvdimm, data, data, NVDIMM_USER);
  127. if (rc < 0) {
  128. nvdimm_put_key(key);
  129. return rc;
  130. }
  131. nvdimm_put_key(key);
  132. nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER);
  133. return 0;
  134. }
  135. static int __nvdimm_security_unlock(struct nvdimm *nvdimm)
  136. {
  137. struct device *dev = &nvdimm->dev;
  138. struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
  139. struct key *key;
  140. const void *data;
  141. int rc;
  142. /* The bus lock should be held at the top level of the call stack */
  143. lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
  144. if (!nvdimm->sec.ops || !nvdimm->sec.ops->unlock
  145. || !nvdimm->sec.flags)
  146. return -EIO;
  147. /* cxl_test needs this to pre-populate the security state */
  148. if (IS_ENABLED(CONFIG_NVDIMM_SECURITY_TEST))
  149. nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER);
  150. /* No need to go further if security is disabled */
  151. if (test_bit(NVDIMM_SECURITY_DISABLED, &nvdimm->sec.flags))
  152. return 0;
  153. if (test_bit(NDD_SECURITY_OVERWRITE, &nvdimm->flags)) {
  154. dev_dbg(dev, "Security operation in progress.\n");
  155. return -EBUSY;
  156. }
  157. /*
  158. * If the pre-OS has unlocked the DIMM, attempt to send the key
  159. * from request_key() to the hardware for verification. Failure
  160. * to revalidate the key against the hardware results in a
  161. * freeze of the security configuration. I.e. if the OS does not
  162. * have the key, security is being managed pre-OS.
  163. */
  164. if (test_bit(NVDIMM_SECURITY_UNLOCKED, &nvdimm->sec.flags)) {
  165. if (!key_revalidate)
  166. return 0;
  167. return nvdimm_key_revalidate(nvdimm);
  168. } else
  169. data = nvdimm_get_key_payload(nvdimm, &key);
  170. rc = nvdimm->sec.ops->unlock(nvdimm, data);
  171. dev_dbg(dev, "key: %d unlock: %s\n", key_serial(key),
  172. rc == 0 ? "success" : "fail");
  173. if (rc == 0)
  174. set_bit(NDD_INCOHERENT, &nvdimm->flags);
  175. nvdimm_put_key(key);
  176. nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER);
  177. return rc;
  178. }
  179. int nvdimm_security_unlock(struct device *dev)
  180. {
  181. struct nvdimm *nvdimm = to_nvdimm(dev);
  182. guard(nvdimm_bus)(dev);
  183. return __nvdimm_security_unlock(nvdimm);
  184. }
  185. static int check_security_state(struct nvdimm *nvdimm)
  186. {
  187. struct device *dev = &nvdimm->dev;
  188. if (test_bit(NVDIMM_SECURITY_FROZEN, &nvdimm->sec.flags)) {
  189. dev_dbg(dev, "Incorrect security state: %#lx\n",
  190. nvdimm->sec.flags);
  191. return -EIO;
  192. }
  193. if (test_bit(NDD_SECURITY_OVERWRITE, &nvdimm->flags)) {
  194. dev_dbg(dev, "Security operation in progress.\n");
  195. return -EBUSY;
  196. }
  197. return 0;
  198. }
  199. static int security_disable(struct nvdimm *nvdimm, unsigned int keyid,
  200. enum nvdimm_passphrase_type pass_type)
  201. {
  202. struct device *dev = &nvdimm->dev;
  203. struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
  204. struct key *key;
  205. int rc;
  206. const void *data;
  207. /* The bus lock should be held at the top level of the call stack */
  208. lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
  209. if (!nvdimm->sec.ops || !nvdimm->sec.flags)
  210. return -EOPNOTSUPP;
  211. if (pass_type == NVDIMM_USER && !nvdimm->sec.ops->disable)
  212. return -EOPNOTSUPP;
  213. if (pass_type == NVDIMM_MASTER && !nvdimm->sec.ops->disable_master)
  214. return -EOPNOTSUPP;
  215. rc = check_security_state(nvdimm);
  216. if (rc)
  217. return rc;
  218. data = nvdimm_get_user_key_payload(nvdimm, keyid,
  219. NVDIMM_BASE_KEY, &key);
  220. if (!data)
  221. return -ENOKEY;
  222. if (pass_type == NVDIMM_MASTER) {
  223. rc = nvdimm->sec.ops->disable_master(nvdimm, data);
  224. dev_dbg(dev, "key: %d disable_master: %s\n", key_serial(key),
  225. rc == 0 ? "success" : "fail");
  226. } else {
  227. rc = nvdimm->sec.ops->disable(nvdimm, data);
  228. dev_dbg(dev, "key: %d disable: %s\n", key_serial(key),
  229. rc == 0 ? "success" : "fail");
  230. }
  231. nvdimm_put_key(key);
  232. if (pass_type == NVDIMM_MASTER)
  233. nvdimm->sec.ext_flags = nvdimm_security_flags(nvdimm, NVDIMM_MASTER);
  234. else
  235. nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER);
  236. return rc;
  237. }
  238. static int security_update(struct nvdimm *nvdimm, unsigned int keyid,
  239. unsigned int new_keyid,
  240. enum nvdimm_passphrase_type pass_type)
  241. {
  242. struct device *dev = &nvdimm->dev;
  243. struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
  244. struct key *key, *newkey;
  245. int rc;
  246. const void *data, *newdata;
  247. /* The bus lock should be held at the top level of the call stack */
  248. lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
  249. if (!nvdimm->sec.ops || !nvdimm->sec.ops->change_key
  250. || !nvdimm->sec.flags)
  251. return -EOPNOTSUPP;
  252. rc = check_security_state(nvdimm);
  253. if (rc)
  254. return rc;
  255. data = nvdimm_get_user_key_payload(nvdimm, keyid,
  256. NVDIMM_BASE_KEY, &key);
  257. if (!data)
  258. return -ENOKEY;
  259. newdata = nvdimm_get_user_key_payload(nvdimm, new_keyid,
  260. NVDIMM_NEW_KEY, &newkey);
  261. if (!newdata) {
  262. nvdimm_put_key(key);
  263. return -ENOKEY;
  264. }
  265. rc = nvdimm->sec.ops->change_key(nvdimm, data, newdata, pass_type);
  266. dev_dbg(dev, "key: %d %d update%s: %s\n",
  267. key_serial(key), key_serial(newkey),
  268. pass_type == NVDIMM_MASTER ? "(master)" : "(user)",
  269. rc == 0 ? "success" : "fail");
  270. nvdimm_put_key(newkey);
  271. nvdimm_put_key(key);
  272. if (pass_type == NVDIMM_MASTER)
  273. nvdimm->sec.ext_flags = nvdimm_security_flags(nvdimm,
  274. NVDIMM_MASTER);
  275. else
  276. nvdimm->sec.flags = nvdimm_security_flags(nvdimm,
  277. NVDIMM_USER);
  278. return rc;
  279. }
  280. static int security_erase(struct nvdimm *nvdimm, unsigned int keyid,
  281. enum nvdimm_passphrase_type pass_type)
  282. {
  283. struct device *dev = &nvdimm->dev;
  284. struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
  285. struct key *key = NULL;
  286. int rc;
  287. const void *data;
  288. /* The bus lock should be held at the top level of the call stack */
  289. lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
  290. if (!nvdimm->sec.ops || !nvdimm->sec.ops->erase
  291. || !nvdimm->sec.flags)
  292. return -EOPNOTSUPP;
  293. rc = check_security_state(nvdimm);
  294. if (rc)
  295. return rc;
  296. if (!test_bit(NVDIMM_SECURITY_UNLOCKED, &nvdimm->sec.ext_flags)
  297. && pass_type == NVDIMM_MASTER) {
  298. dev_dbg(dev,
  299. "Attempt to secure erase in wrong master state.\n");
  300. return -EOPNOTSUPP;
  301. }
  302. data = nvdimm_get_user_key_payload(nvdimm, keyid,
  303. NVDIMM_BASE_KEY, &key);
  304. if (!data)
  305. return -ENOKEY;
  306. rc = nvdimm->sec.ops->erase(nvdimm, data, pass_type);
  307. if (rc == 0)
  308. set_bit(NDD_INCOHERENT, &nvdimm->flags);
  309. dev_dbg(dev, "key: %d erase%s: %s\n", key_serial(key),
  310. pass_type == NVDIMM_MASTER ? "(master)" : "(user)",
  311. rc == 0 ? "success" : "fail");
  312. nvdimm_put_key(key);
  313. nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER);
  314. return rc;
  315. }
  316. static int security_overwrite(struct nvdimm *nvdimm, unsigned int keyid)
  317. {
  318. struct device *dev = &nvdimm->dev;
  319. struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(dev);
  320. struct key *key = NULL;
  321. int rc;
  322. const void *data;
  323. /* The bus lock should be held at the top level of the call stack */
  324. lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
  325. if (!nvdimm->sec.ops || !nvdimm->sec.ops->overwrite
  326. || !nvdimm->sec.flags)
  327. return -EOPNOTSUPP;
  328. rc = check_security_state(nvdimm);
  329. if (rc)
  330. return rc;
  331. data = nvdimm_get_user_key_payload(nvdimm, keyid,
  332. NVDIMM_BASE_KEY, &key);
  333. if (!data)
  334. return -ENOKEY;
  335. rc = nvdimm->sec.ops->overwrite(nvdimm, data);
  336. if (rc == 0)
  337. set_bit(NDD_INCOHERENT, &nvdimm->flags);
  338. dev_dbg(dev, "key: %d overwrite submission: %s\n", key_serial(key),
  339. rc == 0 ? "success" : "fail");
  340. nvdimm_put_key(key);
  341. if (rc == 0) {
  342. set_bit(NDD_SECURITY_OVERWRITE, &nvdimm->flags);
  343. set_bit(NDD_WORK_PENDING, &nvdimm->flags);
  344. set_bit(NVDIMM_SECURITY_OVERWRITE, &nvdimm->sec.flags);
  345. /*
  346. * Make sure we don't lose device while doing overwrite
  347. * query.
  348. */
  349. get_device(dev);
  350. queue_delayed_work(system_percpu_wq, &nvdimm->dwork, 0);
  351. }
  352. return rc;
  353. }
  354. static void __nvdimm_security_overwrite_query(struct nvdimm *nvdimm)
  355. {
  356. struct nvdimm_bus *nvdimm_bus = walk_to_nvdimm_bus(&nvdimm->dev);
  357. int rc;
  358. unsigned int tmo;
  359. /* The bus lock should be held at the top level of the call stack */
  360. lockdep_assert_held(&nvdimm_bus->reconfig_mutex);
  361. /*
  362. * Abort and release device if we no longer have the overwrite
  363. * flag set. It means the work has been canceled.
  364. */
  365. if (!test_bit(NDD_WORK_PENDING, &nvdimm->flags))
  366. return;
  367. tmo = nvdimm->sec.overwrite_tmo;
  368. if (!nvdimm->sec.ops || !nvdimm->sec.ops->query_overwrite
  369. || !nvdimm->sec.flags)
  370. return;
  371. rc = nvdimm->sec.ops->query_overwrite(nvdimm);
  372. if (rc == -EBUSY) {
  373. /* setup delayed work again */
  374. tmo += 10;
  375. queue_delayed_work(system_percpu_wq, &nvdimm->dwork, tmo * HZ);
  376. nvdimm->sec.overwrite_tmo = min(15U * 60U, tmo);
  377. return;
  378. }
  379. if (rc < 0)
  380. dev_dbg(&nvdimm->dev, "overwrite failed\n");
  381. else
  382. dev_dbg(&nvdimm->dev, "overwrite completed\n");
  383. /*
  384. * Mark the overwrite work done and update dimm security flags,
  385. * then send a sysfs event notification to wake up userspace
  386. * poll threads to picked up the changed state.
  387. */
  388. nvdimm->sec.overwrite_tmo = 0;
  389. clear_bit(NDD_SECURITY_OVERWRITE, &nvdimm->flags);
  390. clear_bit(NDD_WORK_PENDING, &nvdimm->flags);
  391. nvdimm->sec.flags = nvdimm_security_flags(nvdimm, NVDIMM_USER);
  392. nvdimm->sec.ext_flags = nvdimm_security_flags(nvdimm, NVDIMM_MASTER);
  393. if (nvdimm->sec.overwrite_state)
  394. sysfs_notify_dirent(nvdimm->sec.overwrite_state);
  395. put_device(&nvdimm->dev);
  396. }
  397. void nvdimm_security_overwrite_query(struct work_struct *work)
  398. {
  399. struct nvdimm *nvdimm =
  400. container_of(work, typeof(*nvdimm), dwork.work);
  401. guard(nvdimm_bus)(&nvdimm->dev);
  402. __nvdimm_security_overwrite_query(nvdimm);
  403. }
  404. #define OPS \
  405. C( OP_FREEZE, "freeze", 1), \
  406. C( OP_DISABLE, "disable", 2), \
  407. C( OP_DISABLE_MASTER, "disable_master", 2), \
  408. C( OP_UPDATE, "update", 3), \
  409. C( OP_ERASE, "erase", 2), \
  410. C( OP_OVERWRITE, "overwrite", 2), \
  411. C( OP_MASTER_UPDATE, "master_update", 3), \
  412. C( OP_MASTER_ERASE, "master_erase", 2)
  413. #undef C
  414. #define C(a, b, c) a
  415. enum nvdimmsec_op_ids { OPS };
  416. #undef C
  417. #define C(a, b, c) { b, c }
  418. static struct {
  419. const char *name;
  420. int args;
  421. } ops[] = { OPS };
  422. #undef C
  423. #define SEC_CMD_SIZE 32
  424. #define KEY_ID_SIZE 10
  425. ssize_t nvdimm_security_store(struct device *dev, const char *buf, size_t len)
  426. {
  427. struct nvdimm *nvdimm = to_nvdimm(dev);
  428. ssize_t rc;
  429. char cmd[SEC_CMD_SIZE+1], keystr[KEY_ID_SIZE+1],
  430. nkeystr[KEY_ID_SIZE+1];
  431. unsigned int key, newkey;
  432. int i;
  433. rc = sscanf(buf, "%"__stringify(SEC_CMD_SIZE)"s"
  434. " %"__stringify(KEY_ID_SIZE)"s"
  435. " %"__stringify(KEY_ID_SIZE)"s",
  436. cmd, keystr, nkeystr);
  437. if (rc < 1)
  438. return -EINVAL;
  439. for (i = 0; i < ARRAY_SIZE(ops); i++)
  440. if (sysfs_streq(cmd, ops[i].name))
  441. break;
  442. if (i >= ARRAY_SIZE(ops))
  443. return -EINVAL;
  444. if (ops[i].args > 1)
  445. rc = kstrtouint(keystr, 0, &key);
  446. if (rc >= 0 && ops[i].args > 2)
  447. rc = kstrtouint(nkeystr, 0, &newkey);
  448. if (rc < 0)
  449. return rc;
  450. if (i == OP_FREEZE) {
  451. dev_dbg(dev, "freeze\n");
  452. rc = nvdimm_security_freeze(nvdimm);
  453. } else if (i == OP_DISABLE) {
  454. dev_dbg(dev, "disable %u\n", key);
  455. rc = security_disable(nvdimm, key, NVDIMM_USER);
  456. } else if (i == OP_DISABLE_MASTER) {
  457. dev_dbg(dev, "disable_master %u\n", key);
  458. rc = security_disable(nvdimm, key, NVDIMM_MASTER);
  459. } else if (i == OP_UPDATE || i == OP_MASTER_UPDATE) {
  460. dev_dbg(dev, "%s %u %u\n", ops[i].name, key, newkey);
  461. rc = security_update(nvdimm, key, newkey, i == OP_UPDATE
  462. ? NVDIMM_USER : NVDIMM_MASTER);
  463. } else if (i == OP_ERASE || i == OP_MASTER_ERASE) {
  464. dev_dbg(dev, "%s %u\n", ops[i].name, key);
  465. if (atomic_read(&nvdimm->busy)) {
  466. dev_dbg(dev, "Unable to secure erase while DIMM active.\n");
  467. return -EBUSY;
  468. }
  469. rc = security_erase(nvdimm, key, i == OP_ERASE
  470. ? NVDIMM_USER : NVDIMM_MASTER);
  471. } else if (i == OP_OVERWRITE) {
  472. dev_dbg(dev, "overwrite %u\n", key);
  473. if (atomic_read(&nvdimm->busy)) {
  474. dev_dbg(dev, "Unable to overwrite while DIMM active.\n");
  475. return -EBUSY;
  476. }
  477. rc = security_overwrite(nvdimm, key);
  478. } else
  479. return -EINVAL;
  480. if (rc == 0)
  481. rc = len;
  482. return rc;
  483. }