sev-dev.c 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * AMD Secure Encrypted Virtualization (SEV) interface
  4. *
  5. * Copyright (C) 2016,2019 Advanced Micro Devices, Inc.
  6. *
  7. * Author: Brijesh Singh <brijesh.singh@amd.com>
  8. */
  9. #include <linux/bitfield.h>
  10. #include <linux/module.h>
  11. #include <linux/kernel.h>
  12. #include <linux/kthread.h>
  13. #include <linux/sched.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/spinlock.h>
  16. #include <linux/spinlock_types.h>
  17. #include <linux/types.h>
  18. #include <linux/mutex.h>
  19. #include <linux/delay.h>
  20. #include <linux/hw_random.h>
  21. #include <linux/ccp.h>
  22. #include <linux/firmware.h>
  23. #include <linux/panic_notifier.h>
  24. #include <linux/gfp.h>
  25. #include <linux/cpufeature.h>
  26. #include <linux/fs.h>
  27. #include <linux/fs_struct.h>
  28. #include <linux/psp.h>
  29. #include <linux/amd-iommu.h>
  30. #include <asm/smp.h>
  31. #include <asm/cacheflush.h>
  32. #include <asm/e820/types.h>
  33. #include <asm/sev.h>
  34. #include "psp-dev.h"
  35. #include "sev-dev.h"
  36. #define DEVICE_NAME "sev"
  37. #define SEV_FW_FILE "amd/sev.fw"
  38. #define SEV_FW_NAME_SIZE 64
  39. /* Minimum firmware version required for the SEV-SNP support */
  40. #define SNP_MIN_API_MAJOR 1
  41. #define SNP_MIN_API_MINOR 51
  42. /*
  43. * Maximum number of firmware-writable buffers that might be specified
  44. * in the parameters of a legacy SEV command buffer.
  45. */
  46. #define CMD_BUF_FW_WRITABLE_MAX 2
  47. /* Leave room in the descriptor array for an end-of-list indicator. */
  48. #define CMD_BUF_DESC_MAX (CMD_BUF_FW_WRITABLE_MAX + 1)
  49. static DEFINE_MUTEX(sev_cmd_mutex);
  50. static struct sev_misc_dev *misc_dev;
  51. static int psp_cmd_timeout = 100;
  52. module_param(psp_cmd_timeout, int, 0644);
  53. MODULE_PARM_DESC(psp_cmd_timeout, " default timeout value, in seconds, for PSP commands");
  54. static int psp_probe_timeout = 5;
  55. module_param(psp_probe_timeout, int, 0644);
  56. MODULE_PARM_DESC(psp_probe_timeout, " default timeout value, in seconds, during PSP device probe");
  57. static char *init_ex_path;
  58. module_param(init_ex_path, charp, 0444);
  59. MODULE_PARM_DESC(init_ex_path, " Path for INIT_EX data; if set try INIT_EX");
  60. static bool psp_init_on_probe = true;
  61. module_param(psp_init_on_probe, bool, 0444);
  62. MODULE_PARM_DESC(psp_init_on_probe, " if true, the PSP will be initialized on module init. Else the PSP will be initialized on the first command requiring it");
  63. MODULE_FIRMWARE("amd/amd_sev_fam17h_model0xh.sbin"); /* 1st gen EPYC */
  64. MODULE_FIRMWARE("amd/amd_sev_fam17h_model3xh.sbin"); /* 2nd gen EPYC */
  65. MODULE_FIRMWARE("amd/amd_sev_fam19h_model0xh.sbin"); /* 3rd gen EPYC */
  66. MODULE_FIRMWARE("amd/amd_sev_fam19h_model1xh.sbin"); /* 4th gen EPYC */
  67. static bool psp_dead;
  68. static int psp_timeout;
  69. /* Trusted Memory Region (TMR):
  70. * The TMR is a 1MB area that must be 1MB aligned. Use the page allocator
  71. * to allocate the memory, which will return aligned memory for the specified
  72. * allocation order.
  73. *
  74. * When SEV-SNP is enabled the TMR needs to be 2MB aligned and 2MB sized.
  75. */
  76. #define SEV_TMR_SIZE (1024 * 1024)
  77. #define SNP_TMR_SIZE (2 * 1024 * 1024)
  78. static void *sev_es_tmr;
  79. static size_t sev_es_tmr_size = SEV_TMR_SIZE;
  80. /* INIT_EX NV Storage:
  81. * The NV Storage is a 32Kb area and must be 4Kb page aligned. Use the page
  82. * allocator to allocate the memory, which will return aligned memory for the
  83. * specified allocation order.
  84. */
  85. #define NV_LENGTH (32 * 1024)
  86. static void *sev_init_ex_buffer;
  87. /*
  88. * SEV_DATA_RANGE_LIST:
  89. * Array containing range of pages that firmware transitions to HV-fixed
  90. * page state.
  91. */
  92. static struct sev_data_range_list *snp_range_list;
  93. static inline bool sev_version_greater_or_equal(u8 maj, u8 min)
  94. {
  95. struct sev_device *sev = psp_master->sev_data;
  96. if (sev->api_major > maj)
  97. return true;
  98. if (sev->api_major == maj && sev->api_minor >= min)
  99. return true;
  100. return false;
  101. }
  102. static void sev_irq_handler(int irq, void *data, unsigned int status)
  103. {
  104. struct sev_device *sev = data;
  105. int reg;
  106. /* Check if it is command completion: */
  107. if (!(status & SEV_CMD_COMPLETE))
  108. return;
  109. /* Check if it is SEV command completion: */
  110. reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
  111. if (FIELD_GET(PSP_CMDRESP_RESP, reg)) {
  112. sev->int_rcvd = 1;
  113. wake_up(&sev->int_queue);
  114. }
  115. }
  116. static int sev_wait_cmd_ioc(struct sev_device *sev,
  117. unsigned int *reg, unsigned int timeout)
  118. {
  119. int ret;
  120. /*
  121. * If invoked during panic handling, local interrupts are disabled,
  122. * so the PSP command completion interrupt can't be used. Poll for
  123. * PSP command completion instead.
  124. */
  125. if (irqs_disabled()) {
  126. unsigned long timeout_usecs = (timeout * USEC_PER_SEC) / 10;
  127. /* Poll for SEV command completion: */
  128. while (timeout_usecs--) {
  129. *reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
  130. if (*reg & PSP_CMDRESP_RESP)
  131. return 0;
  132. udelay(10);
  133. }
  134. return -ETIMEDOUT;
  135. }
  136. ret = wait_event_timeout(sev->int_queue,
  137. sev->int_rcvd, timeout * HZ);
  138. if (!ret)
  139. return -ETIMEDOUT;
  140. *reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
  141. return 0;
  142. }
  143. static int sev_cmd_buffer_len(int cmd)
  144. {
  145. switch (cmd) {
  146. case SEV_CMD_INIT: return sizeof(struct sev_data_init);
  147. case SEV_CMD_INIT_EX: return sizeof(struct sev_data_init_ex);
  148. case SEV_CMD_SNP_SHUTDOWN_EX: return sizeof(struct sev_data_snp_shutdown_ex);
  149. case SEV_CMD_SNP_INIT_EX: return sizeof(struct sev_data_snp_init_ex);
  150. case SEV_CMD_PLATFORM_STATUS: return sizeof(struct sev_user_data_status);
  151. case SEV_CMD_PEK_CSR: return sizeof(struct sev_data_pek_csr);
  152. case SEV_CMD_PEK_CERT_IMPORT: return sizeof(struct sev_data_pek_cert_import);
  153. case SEV_CMD_PDH_CERT_EXPORT: return sizeof(struct sev_data_pdh_cert_export);
  154. case SEV_CMD_LAUNCH_START: return sizeof(struct sev_data_launch_start);
  155. case SEV_CMD_LAUNCH_UPDATE_DATA: return sizeof(struct sev_data_launch_update_data);
  156. case SEV_CMD_LAUNCH_UPDATE_VMSA: return sizeof(struct sev_data_launch_update_vmsa);
  157. case SEV_CMD_LAUNCH_FINISH: return sizeof(struct sev_data_launch_finish);
  158. case SEV_CMD_LAUNCH_MEASURE: return sizeof(struct sev_data_launch_measure);
  159. case SEV_CMD_ACTIVATE: return sizeof(struct sev_data_activate);
  160. case SEV_CMD_DEACTIVATE: return sizeof(struct sev_data_deactivate);
  161. case SEV_CMD_DECOMMISSION: return sizeof(struct sev_data_decommission);
  162. case SEV_CMD_GUEST_STATUS: return sizeof(struct sev_data_guest_status);
  163. case SEV_CMD_DBG_DECRYPT: return sizeof(struct sev_data_dbg);
  164. case SEV_CMD_DBG_ENCRYPT: return sizeof(struct sev_data_dbg);
  165. case SEV_CMD_SEND_START: return sizeof(struct sev_data_send_start);
  166. case SEV_CMD_SEND_UPDATE_DATA: return sizeof(struct sev_data_send_update_data);
  167. case SEV_CMD_SEND_UPDATE_VMSA: return sizeof(struct sev_data_send_update_vmsa);
  168. case SEV_CMD_SEND_FINISH: return sizeof(struct sev_data_send_finish);
  169. case SEV_CMD_RECEIVE_START: return sizeof(struct sev_data_receive_start);
  170. case SEV_CMD_RECEIVE_FINISH: return sizeof(struct sev_data_receive_finish);
  171. case SEV_CMD_RECEIVE_UPDATE_DATA: return sizeof(struct sev_data_receive_update_data);
  172. case SEV_CMD_RECEIVE_UPDATE_VMSA: return sizeof(struct sev_data_receive_update_vmsa);
  173. case SEV_CMD_LAUNCH_UPDATE_SECRET: return sizeof(struct sev_data_launch_secret);
  174. case SEV_CMD_DOWNLOAD_FIRMWARE: return sizeof(struct sev_data_download_firmware);
  175. case SEV_CMD_GET_ID: return sizeof(struct sev_data_get_id);
  176. case SEV_CMD_ATTESTATION_REPORT: return sizeof(struct sev_data_attestation_report);
  177. case SEV_CMD_SEND_CANCEL: return sizeof(struct sev_data_send_cancel);
  178. case SEV_CMD_SNP_GCTX_CREATE: return sizeof(struct sev_data_snp_addr);
  179. case SEV_CMD_SNP_LAUNCH_START: return sizeof(struct sev_data_snp_launch_start);
  180. case SEV_CMD_SNP_LAUNCH_UPDATE: return sizeof(struct sev_data_snp_launch_update);
  181. case SEV_CMD_SNP_ACTIVATE: return sizeof(struct sev_data_snp_activate);
  182. case SEV_CMD_SNP_DECOMMISSION: return sizeof(struct sev_data_snp_addr);
  183. case SEV_CMD_SNP_PAGE_RECLAIM: return sizeof(struct sev_data_snp_page_reclaim);
  184. case SEV_CMD_SNP_GUEST_STATUS: return sizeof(struct sev_data_snp_guest_status);
  185. case SEV_CMD_SNP_LAUNCH_FINISH: return sizeof(struct sev_data_snp_launch_finish);
  186. case SEV_CMD_SNP_DBG_DECRYPT: return sizeof(struct sev_data_snp_dbg);
  187. case SEV_CMD_SNP_DBG_ENCRYPT: return sizeof(struct sev_data_snp_dbg);
  188. case SEV_CMD_SNP_PAGE_UNSMASH: return sizeof(struct sev_data_snp_page_unsmash);
  189. case SEV_CMD_SNP_PLATFORM_STATUS: return sizeof(struct sev_data_snp_addr);
  190. case SEV_CMD_SNP_GUEST_REQUEST: return sizeof(struct sev_data_snp_guest_request);
  191. case SEV_CMD_SNP_CONFIG: return sizeof(struct sev_user_data_snp_config);
  192. case SEV_CMD_SNP_COMMIT: return sizeof(struct sev_data_snp_commit);
  193. default: return 0;
  194. }
  195. return 0;
  196. }
  197. static struct file *open_file_as_root(const char *filename, int flags, umode_t mode)
  198. {
  199. struct file *fp;
  200. struct path root;
  201. struct cred *cred;
  202. const struct cred *old_cred;
  203. task_lock(&init_task);
  204. get_fs_root(init_task.fs, &root);
  205. task_unlock(&init_task);
  206. cred = prepare_creds();
  207. if (!cred)
  208. return ERR_PTR(-ENOMEM);
  209. cred->fsuid = GLOBAL_ROOT_UID;
  210. old_cred = override_creds(cred);
  211. fp = file_open_root(&root, filename, flags, mode);
  212. path_put(&root);
  213. revert_creds(old_cred);
  214. return fp;
  215. }
  216. static int sev_read_init_ex_file(void)
  217. {
  218. struct sev_device *sev = psp_master->sev_data;
  219. struct file *fp;
  220. ssize_t nread;
  221. lockdep_assert_held(&sev_cmd_mutex);
  222. if (!sev_init_ex_buffer)
  223. return -EOPNOTSUPP;
  224. fp = open_file_as_root(init_ex_path, O_RDONLY, 0);
  225. if (IS_ERR(fp)) {
  226. int ret = PTR_ERR(fp);
  227. if (ret == -ENOENT) {
  228. dev_info(sev->dev,
  229. "SEV: %s does not exist and will be created later.\n",
  230. init_ex_path);
  231. ret = 0;
  232. } else {
  233. dev_err(sev->dev,
  234. "SEV: could not open %s for read, error %d\n",
  235. init_ex_path, ret);
  236. }
  237. return ret;
  238. }
  239. nread = kernel_read(fp, sev_init_ex_buffer, NV_LENGTH, NULL);
  240. if (nread != NV_LENGTH) {
  241. dev_info(sev->dev,
  242. "SEV: could not read %u bytes to non volatile memory area, ret %ld\n",
  243. NV_LENGTH, nread);
  244. }
  245. dev_dbg(sev->dev, "SEV: read %ld bytes from NV file\n", nread);
  246. filp_close(fp, NULL);
  247. return 0;
  248. }
  249. static int sev_write_init_ex_file(void)
  250. {
  251. struct sev_device *sev = psp_master->sev_data;
  252. struct file *fp;
  253. loff_t offset = 0;
  254. ssize_t nwrite;
  255. lockdep_assert_held(&sev_cmd_mutex);
  256. if (!sev_init_ex_buffer)
  257. return 0;
  258. fp = open_file_as_root(init_ex_path, O_CREAT | O_WRONLY, 0600);
  259. if (IS_ERR(fp)) {
  260. int ret = PTR_ERR(fp);
  261. dev_err(sev->dev,
  262. "SEV: could not open file for write, error %d\n",
  263. ret);
  264. return ret;
  265. }
  266. nwrite = kernel_write(fp, sev_init_ex_buffer, NV_LENGTH, &offset);
  267. vfs_fsync(fp, 0);
  268. filp_close(fp, NULL);
  269. if (nwrite != NV_LENGTH) {
  270. dev_err(sev->dev,
  271. "SEV: failed to write %u bytes to non volatile memory area, ret %ld\n",
  272. NV_LENGTH, nwrite);
  273. return -EIO;
  274. }
  275. dev_dbg(sev->dev, "SEV: write successful to NV file\n");
  276. return 0;
  277. }
  278. static int sev_write_init_ex_file_if_required(int cmd_id)
  279. {
  280. lockdep_assert_held(&sev_cmd_mutex);
  281. if (!sev_init_ex_buffer)
  282. return 0;
  283. /*
  284. * Only a few platform commands modify the SPI/NV area, but none of the
  285. * non-platform commands do. Only INIT(_EX), PLATFORM_RESET, PEK_GEN,
  286. * PEK_CERT_IMPORT, and PDH_GEN do.
  287. */
  288. switch (cmd_id) {
  289. case SEV_CMD_FACTORY_RESET:
  290. case SEV_CMD_INIT_EX:
  291. case SEV_CMD_PDH_GEN:
  292. case SEV_CMD_PEK_CERT_IMPORT:
  293. case SEV_CMD_PEK_GEN:
  294. break;
  295. default:
  296. return 0;
  297. }
  298. return sev_write_init_ex_file();
  299. }
  300. /*
  301. * snp_reclaim_pages() needs __sev_do_cmd_locked(), and __sev_do_cmd_locked()
  302. * needs snp_reclaim_pages(), so a forward declaration is needed.
  303. */
  304. static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret);
  305. static int snp_reclaim_pages(unsigned long paddr, unsigned int npages, bool locked)
  306. {
  307. int ret, err, i;
  308. paddr = __sme_clr(ALIGN_DOWN(paddr, PAGE_SIZE));
  309. for (i = 0; i < npages; i++, paddr += PAGE_SIZE) {
  310. struct sev_data_snp_page_reclaim data = {0};
  311. data.paddr = paddr;
  312. if (locked)
  313. ret = __sev_do_cmd_locked(SEV_CMD_SNP_PAGE_RECLAIM, &data, &err);
  314. else
  315. ret = sev_do_cmd(SEV_CMD_SNP_PAGE_RECLAIM, &data, &err);
  316. if (ret)
  317. goto cleanup;
  318. ret = rmp_make_shared(__phys_to_pfn(paddr), PG_LEVEL_4K);
  319. if (ret)
  320. goto cleanup;
  321. }
  322. return 0;
  323. cleanup:
  324. /*
  325. * If there was a failure reclaiming the page then it is no longer safe
  326. * to release it back to the system; leak it instead.
  327. */
  328. snp_leak_pages(__phys_to_pfn(paddr), npages - i);
  329. return ret;
  330. }
  331. static int rmp_mark_pages_firmware(unsigned long paddr, unsigned int npages, bool locked)
  332. {
  333. unsigned long pfn = __sme_clr(paddr) >> PAGE_SHIFT;
  334. int rc, i;
  335. for (i = 0; i < npages; i++, pfn++) {
  336. rc = rmp_make_private(pfn, 0, PG_LEVEL_4K, 0, true);
  337. if (rc)
  338. goto cleanup;
  339. }
  340. return 0;
  341. cleanup:
  342. /*
  343. * Try unrolling the firmware state changes by
  344. * reclaiming the pages which were already changed to the
  345. * firmware state.
  346. */
  347. snp_reclaim_pages(paddr, i, locked);
  348. return rc;
  349. }
  350. static struct page *__snp_alloc_firmware_pages(gfp_t gfp_mask, int order, bool locked)
  351. {
  352. unsigned long npages = 1ul << order, paddr;
  353. struct sev_device *sev;
  354. struct page *page;
  355. if (!psp_master || !psp_master->sev_data)
  356. return NULL;
  357. page = alloc_pages(gfp_mask, order);
  358. if (!page)
  359. return NULL;
  360. /* If SEV-SNP is initialized then add the page in RMP table. */
  361. sev = psp_master->sev_data;
  362. if (!sev->snp_initialized)
  363. return page;
  364. paddr = __pa((unsigned long)page_address(page));
  365. if (rmp_mark_pages_firmware(paddr, npages, locked))
  366. return NULL;
  367. return page;
  368. }
  369. void *snp_alloc_firmware_page(gfp_t gfp_mask)
  370. {
  371. struct page *page;
  372. page = __snp_alloc_firmware_pages(gfp_mask, 0, false);
  373. return page ? page_address(page) : NULL;
  374. }
  375. EXPORT_SYMBOL_GPL(snp_alloc_firmware_page);
  376. static void __snp_free_firmware_pages(struct page *page, int order, bool locked)
  377. {
  378. struct sev_device *sev = psp_master->sev_data;
  379. unsigned long paddr, npages = 1ul << order;
  380. if (!page)
  381. return;
  382. paddr = __pa((unsigned long)page_address(page));
  383. if (sev->snp_initialized &&
  384. snp_reclaim_pages(paddr, npages, locked))
  385. return;
  386. __free_pages(page, order);
  387. }
  388. void snp_free_firmware_page(void *addr)
  389. {
  390. if (!addr)
  391. return;
  392. __snp_free_firmware_pages(virt_to_page(addr), 0, false);
  393. }
  394. EXPORT_SYMBOL_GPL(snp_free_firmware_page);
  395. static void *sev_fw_alloc(unsigned long len)
  396. {
  397. struct page *page;
  398. page = __snp_alloc_firmware_pages(GFP_KERNEL, get_order(len), true);
  399. if (!page)
  400. return NULL;
  401. return page_address(page);
  402. }
  403. /**
  404. * struct cmd_buf_desc - descriptors for managing legacy SEV command address
  405. * parameters corresponding to buffers that may be written to by firmware.
  406. *
  407. * @paddr_ptr: pointer to the address parameter in the command buffer which may
  408. * need to be saved/restored depending on whether a bounce buffer
  409. * is used. In the case of a bounce buffer, the command buffer
  410. * needs to be updated with the address of the new bounce buffer
  411. * snp_map_cmd_buf_desc() has allocated specifically for it. Must
  412. * be NULL if this descriptor is only an end-of-list indicator.
  413. *
  414. * @paddr_orig: storage for the original address parameter, which can be used to
  415. * restore the original value in @paddr_ptr in cases where it is
  416. * replaced with the address of a bounce buffer.
  417. *
  418. * @len: length of buffer located at the address originally stored at @paddr_ptr
  419. *
  420. * @guest_owned: true if the address corresponds to guest-owned pages, in which
  421. * case bounce buffers are not needed.
  422. */
  423. struct cmd_buf_desc {
  424. u64 *paddr_ptr;
  425. u64 paddr_orig;
  426. u32 len;
  427. bool guest_owned;
  428. };
  429. /*
  430. * If a legacy SEV command parameter is a memory address, those pages in
  431. * turn need to be transitioned to/from firmware-owned before/after
  432. * executing the firmware command.
  433. *
  434. * Additionally, in cases where those pages are not guest-owned, a bounce
  435. * buffer is needed in place of the original memory address parameter.
  436. *
  437. * A set of descriptors are used to keep track of this handling, and
  438. * initialized here based on the specific commands being executed.
  439. */
  440. static void snp_populate_cmd_buf_desc_list(int cmd, void *cmd_buf,
  441. struct cmd_buf_desc *desc_list)
  442. {
  443. switch (cmd) {
  444. case SEV_CMD_PDH_CERT_EXPORT: {
  445. struct sev_data_pdh_cert_export *data = cmd_buf;
  446. desc_list[0].paddr_ptr = &data->pdh_cert_address;
  447. desc_list[0].len = data->pdh_cert_len;
  448. desc_list[1].paddr_ptr = &data->cert_chain_address;
  449. desc_list[1].len = data->cert_chain_len;
  450. break;
  451. }
  452. case SEV_CMD_GET_ID: {
  453. struct sev_data_get_id *data = cmd_buf;
  454. desc_list[0].paddr_ptr = &data->address;
  455. desc_list[0].len = data->len;
  456. break;
  457. }
  458. case SEV_CMD_PEK_CSR: {
  459. struct sev_data_pek_csr *data = cmd_buf;
  460. desc_list[0].paddr_ptr = &data->address;
  461. desc_list[0].len = data->len;
  462. break;
  463. }
  464. case SEV_CMD_LAUNCH_UPDATE_DATA: {
  465. struct sev_data_launch_update_data *data = cmd_buf;
  466. desc_list[0].paddr_ptr = &data->address;
  467. desc_list[0].len = data->len;
  468. desc_list[0].guest_owned = true;
  469. break;
  470. }
  471. case SEV_CMD_LAUNCH_UPDATE_VMSA: {
  472. struct sev_data_launch_update_vmsa *data = cmd_buf;
  473. desc_list[0].paddr_ptr = &data->address;
  474. desc_list[0].len = data->len;
  475. desc_list[0].guest_owned = true;
  476. break;
  477. }
  478. case SEV_CMD_LAUNCH_MEASURE: {
  479. struct sev_data_launch_measure *data = cmd_buf;
  480. desc_list[0].paddr_ptr = &data->address;
  481. desc_list[0].len = data->len;
  482. break;
  483. }
  484. case SEV_CMD_LAUNCH_UPDATE_SECRET: {
  485. struct sev_data_launch_secret *data = cmd_buf;
  486. desc_list[0].paddr_ptr = &data->guest_address;
  487. desc_list[0].len = data->guest_len;
  488. desc_list[0].guest_owned = true;
  489. break;
  490. }
  491. case SEV_CMD_DBG_DECRYPT: {
  492. struct sev_data_dbg *data = cmd_buf;
  493. desc_list[0].paddr_ptr = &data->dst_addr;
  494. desc_list[0].len = data->len;
  495. desc_list[0].guest_owned = true;
  496. break;
  497. }
  498. case SEV_CMD_DBG_ENCRYPT: {
  499. struct sev_data_dbg *data = cmd_buf;
  500. desc_list[0].paddr_ptr = &data->dst_addr;
  501. desc_list[0].len = data->len;
  502. desc_list[0].guest_owned = true;
  503. break;
  504. }
  505. case SEV_CMD_ATTESTATION_REPORT: {
  506. struct sev_data_attestation_report *data = cmd_buf;
  507. desc_list[0].paddr_ptr = &data->address;
  508. desc_list[0].len = data->len;
  509. break;
  510. }
  511. case SEV_CMD_SEND_START: {
  512. struct sev_data_send_start *data = cmd_buf;
  513. desc_list[0].paddr_ptr = &data->session_address;
  514. desc_list[0].len = data->session_len;
  515. break;
  516. }
  517. case SEV_CMD_SEND_UPDATE_DATA: {
  518. struct sev_data_send_update_data *data = cmd_buf;
  519. desc_list[0].paddr_ptr = &data->hdr_address;
  520. desc_list[0].len = data->hdr_len;
  521. desc_list[1].paddr_ptr = &data->trans_address;
  522. desc_list[1].len = data->trans_len;
  523. break;
  524. }
  525. case SEV_CMD_SEND_UPDATE_VMSA: {
  526. struct sev_data_send_update_vmsa *data = cmd_buf;
  527. desc_list[0].paddr_ptr = &data->hdr_address;
  528. desc_list[0].len = data->hdr_len;
  529. desc_list[1].paddr_ptr = &data->trans_address;
  530. desc_list[1].len = data->trans_len;
  531. break;
  532. }
  533. case SEV_CMD_RECEIVE_UPDATE_DATA: {
  534. struct sev_data_receive_update_data *data = cmd_buf;
  535. desc_list[0].paddr_ptr = &data->guest_address;
  536. desc_list[0].len = data->guest_len;
  537. desc_list[0].guest_owned = true;
  538. break;
  539. }
  540. case SEV_CMD_RECEIVE_UPDATE_VMSA: {
  541. struct sev_data_receive_update_vmsa *data = cmd_buf;
  542. desc_list[0].paddr_ptr = &data->guest_address;
  543. desc_list[0].len = data->guest_len;
  544. desc_list[0].guest_owned = true;
  545. break;
  546. }
  547. default:
  548. break;
  549. }
  550. }
  551. static int snp_map_cmd_buf_desc(struct cmd_buf_desc *desc)
  552. {
  553. unsigned int npages;
  554. if (!desc->len)
  555. return 0;
  556. /* Allocate a bounce buffer if this isn't a guest owned page. */
  557. if (!desc->guest_owned) {
  558. struct page *page;
  559. page = alloc_pages(GFP_KERNEL_ACCOUNT, get_order(desc->len));
  560. if (!page) {
  561. pr_warn("Failed to allocate bounce buffer for SEV legacy command.\n");
  562. return -ENOMEM;
  563. }
  564. desc->paddr_orig = *desc->paddr_ptr;
  565. *desc->paddr_ptr = __psp_pa(page_to_virt(page));
  566. }
  567. npages = PAGE_ALIGN(desc->len) >> PAGE_SHIFT;
  568. /* Transition the buffer to firmware-owned. */
  569. if (rmp_mark_pages_firmware(*desc->paddr_ptr, npages, true)) {
  570. pr_warn("Error moving pages to firmware-owned state for SEV legacy command.\n");
  571. return -EFAULT;
  572. }
  573. return 0;
  574. }
  575. static int snp_unmap_cmd_buf_desc(struct cmd_buf_desc *desc)
  576. {
  577. unsigned int npages;
  578. if (!desc->len)
  579. return 0;
  580. npages = PAGE_ALIGN(desc->len) >> PAGE_SHIFT;
  581. /* Transition the buffers back to hypervisor-owned. */
  582. if (snp_reclaim_pages(*desc->paddr_ptr, npages, true)) {
  583. pr_warn("Failed to reclaim firmware-owned pages while issuing SEV legacy command.\n");
  584. return -EFAULT;
  585. }
  586. /* Copy data from bounce buffer and then free it. */
  587. if (!desc->guest_owned) {
  588. void *bounce_buf = __va(__sme_clr(*desc->paddr_ptr));
  589. void *dst_buf = __va(__sme_clr(desc->paddr_orig));
  590. memcpy(dst_buf, bounce_buf, desc->len);
  591. __free_pages(virt_to_page(bounce_buf), get_order(desc->len));
  592. /* Restore the original address in the command buffer. */
  593. *desc->paddr_ptr = desc->paddr_orig;
  594. }
  595. return 0;
  596. }
  597. static int snp_map_cmd_buf_desc_list(int cmd, void *cmd_buf, struct cmd_buf_desc *desc_list)
  598. {
  599. int i;
  600. snp_populate_cmd_buf_desc_list(cmd, cmd_buf, desc_list);
  601. for (i = 0; i < CMD_BUF_DESC_MAX; i++) {
  602. struct cmd_buf_desc *desc = &desc_list[i];
  603. if (!desc->paddr_ptr)
  604. break;
  605. if (snp_map_cmd_buf_desc(desc))
  606. goto err_unmap;
  607. }
  608. return 0;
  609. err_unmap:
  610. for (i--; i >= 0; i--)
  611. snp_unmap_cmd_buf_desc(&desc_list[i]);
  612. return -EFAULT;
  613. }
  614. static int snp_unmap_cmd_buf_desc_list(struct cmd_buf_desc *desc_list)
  615. {
  616. int i, ret = 0;
  617. for (i = 0; i < CMD_BUF_DESC_MAX; i++) {
  618. struct cmd_buf_desc *desc = &desc_list[i];
  619. if (!desc->paddr_ptr)
  620. break;
  621. if (snp_unmap_cmd_buf_desc(&desc_list[i]))
  622. ret = -EFAULT;
  623. }
  624. return ret;
  625. }
  626. static bool sev_cmd_buf_writable(int cmd)
  627. {
  628. switch (cmd) {
  629. case SEV_CMD_PLATFORM_STATUS:
  630. case SEV_CMD_GUEST_STATUS:
  631. case SEV_CMD_LAUNCH_START:
  632. case SEV_CMD_RECEIVE_START:
  633. case SEV_CMD_LAUNCH_MEASURE:
  634. case SEV_CMD_SEND_START:
  635. case SEV_CMD_SEND_UPDATE_DATA:
  636. case SEV_CMD_SEND_UPDATE_VMSA:
  637. case SEV_CMD_PEK_CSR:
  638. case SEV_CMD_PDH_CERT_EXPORT:
  639. case SEV_CMD_GET_ID:
  640. case SEV_CMD_ATTESTATION_REPORT:
  641. return true;
  642. default:
  643. return false;
  644. }
  645. }
  646. /* After SNP is INIT'ed, the behavior of legacy SEV commands is changed. */
  647. static bool snp_legacy_handling_needed(int cmd)
  648. {
  649. struct sev_device *sev = psp_master->sev_data;
  650. return cmd < SEV_CMD_SNP_INIT && sev->snp_initialized;
  651. }
  652. static int snp_prep_cmd_buf(int cmd, void *cmd_buf, struct cmd_buf_desc *desc_list)
  653. {
  654. if (!snp_legacy_handling_needed(cmd))
  655. return 0;
  656. if (snp_map_cmd_buf_desc_list(cmd, cmd_buf, desc_list))
  657. return -EFAULT;
  658. /*
  659. * Before command execution, the command buffer needs to be put into
  660. * the firmware-owned state.
  661. */
  662. if (sev_cmd_buf_writable(cmd)) {
  663. if (rmp_mark_pages_firmware(__pa(cmd_buf), 1, true))
  664. return -EFAULT;
  665. }
  666. return 0;
  667. }
  668. static int snp_reclaim_cmd_buf(int cmd, void *cmd_buf)
  669. {
  670. if (!snp_legacy_handling_needed(cmd))
  671. return 0;
  672. /*
  673. * After command completion, the command buffer needs to be put back
  674. * into the hypervisor-owned state.
  675. */
  676. if (sev_cmd_buf_writable(cmd))
  677. if (snp_reclaim_pages(__pa(cmd_buf), 1, true))
  678. return -EFAULT;
  679. return 0;
  680. }
  681. static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret)
  682. {
  683. struct cmd_buf_desc desc_list[CMD_BUF_DESC_MAX] = {0};
  684. struct psp_device *psp = psp_master;
  685. struct sev_device *sev;
  686. unsigned int cmdbuff_hi, cmdbuff_lo;
  687. unsigned int phys_lsb, phys_msb;
  688. unsigned int reg, ret = 0;
  689. void *cmd_buf;
  690. int buf_len;
  691. if (!psp || !psp->sev_data)
  692. return -ENODEV;
  693. if (psp_dead)
  694. return -EBUSY;
  695. sev = psp->sev_data;
  696. buf_len = sev_cmd_buffer_len(cmd);
  697. if (WARN_ON_ONCE(!data != !buf_len))
  698. return -EINVAL;
  699. /*
  700. * Copy the incoming data to driver's scratch buffer as __pa() will not
  701. * work for some memory, e.g. vmalloc'd addresses, and @data may not be
  702. * physically contiguous.
  703. */
  704. if (data) {
  705. /*
  706. * Commands are generally issued one at a time and require the
  707. * sev_cmd_mutex, but there could be recursive firmware requests
  708. * due to SEV_CMD_SNP_PAGE_RECLAIM needing to be issued while
  709. * preparing buffers for another command. This is the only known
  710. * case of nesting in the current code, so exactly one
  711. * additional command buffer is available for that purpose.
  712. */
  713. if (!sev->cmd_buf_active) {
  714. cmd_buf = sev->cmd_buf;
  715. sev->cmd_buf_active = true;
  716. } else if (!sev->cmd_buf_backup_active) {
  717. cmd_buf = sev->cmd_buf_backup;
  718. sev->cmd_buf_backup_active = true;
  719. } else {
  720. dev_err(sev->dev,
  721. "SEV: too many firmware commands in progress, no command buffers available.\n");
  722. return -EBUSY;
  723. }
  724. memcpy(cmd_buf, data, buf_len);
  725. /*
  726. * The behavior of the SEV-legacy commands is altered when the
  727. * SNP firmware is in the INIT state.
  728. */
  729. ret = snp_prep_cmd_buf(cmd, cmd_buf, desc_list);
  730. if (ret) {
  731. dev_err(sev->dev,
  732. "SEV: failed to prepare buffer for legacy command 0x%x. Error: %d\n",
  733. cmd, ret);
  734. return ret;
  735. }
  736. } else {
  737. cmd_buf = sev->cmd_buf;
  738. }
  739. /* Get the physical address of the command buffer */
  740. phys_lsb = data ? lower_32_bits(__psp_pa(cmd_buf)) : 0;
  741. phys_msb = data ? upper_32_bits(__psp_pa(cmd_buf)) : 0;
  742. dev_dbg(sev->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n",
  743. cmd, phys_msb, phys_lsb, psp_timeout);
  744. print_hex_dump_debug("(in): ", DUMP_PREFIX_OFFSET, 16, 2, data,
  745. buf_len, false);
  746. iowrite32(phys_lsb, sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg);
  747. iowrite32(phys_msb, sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg);
  748. sev->int_rcvd = 0;
  749. reg = FIELD_PREP(SEV_CMDRESP_CMD, cmd);
  750. /*
  751. * If invoked during panic handling, local interrupts are disabled so
  752. * the PSP command completion interrupt can't be used.
  753. * sev_wait_cmd_ioc() already checks for interrupts disabled and
  754. * polls for PSP command completion. Ensure we do not request an
  755. * interrupt from the PSP if irqs disabled.
  756. */
  757. if (!irqs_disabled())
  758. reg |= SEV_CMDRESP_IOC;
  759. iowrite32(reg, sev->io_regs + sev->vdata->cmdresp_reg);
  760. /* wait for command completion */
  761. ret = sev_wait_cmd_ioc(sev, &reg, psp_timeout);
  762. if (ret) {
  763. if (psp_ret)
  764. *psp_ret = 0;
  765. dev_err(sev->dev, "sev command %#x timed out, disabling PSP\n", cmd);
  766. psp_dead = true;
  767. return ret;
  768. }
  769. psp_timeout = psp_cmd_timeout;
  770. if (psp_ret)
  771. *psp_ret = FIELD_GET(PSP_CMDRESP_STS, reg);
  772. if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
  773. dev_dbg(sev->dev, "sev command %#x failed (%#010lx)\n",
  774. cmd, FIELD_GET(PSP_CMDRESP_STS, reg));
  775. /*
  776. * PSP firmware may report additional error information in the
  777. * command buffer registers on error. Print contents of command
  778. * buffer registers if they changed.
  779. */
  780. cmdbuff_hi = ioread32(sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg);
  781. cmdbuff_lo = ioread32(sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg);
  782. if (cmdbuff_hi != phys_msb || cmdbuff_lo != phys_lsb) {
  783. dev_dbg(sev->dev, "Additional error information reported in cmdbuff:");
  784. dev_dbg(sev->dev, " cmdbuff hi: %#010x\n", cmdbuff_hi);
  785. dev_dbg(sev->dev, " cmdbuff lo: %#010x\n", cmdbuff_lo);
  786. }
  787. ret = -EIO;
  788. } else {
  789. ret = sev_write_init_ex_file_if_required(cmd);
  790. }
  791. /*
  792. * Copy potential output from the PSP back to data. Do this even on
  793. * failure in case the caller wants to glean something from the error.
  794. */
  795. if (data) {
  796. int ret_reclaim;
  797. /*
  798. * Restore the page state after the command completes.
  799. */
  800. ret_reclaim = snp_reclaim_cmd_buf(cmd, cmd_buf);
  801. if (ret_reclaim) {
  802. dev_err(sev->dev,
  803. "SEV: failed to reclaim buffer for legacy command %#x. Error: %d\n",
  804. cmd, ret_reclaim);
  805. return ret_reclaim;
  806. }
  807. memcpy(data, cmd_buf, buf_len);
  808. if (sev->cmd_buf_backup_active)
  809. sev->cmd_buf_backup_active = false;
  810. else
  811. sev->cmd_buf_active = false;
  812. if (snp_unmap_cmd_buf_desc_list(desc_list))
  813. return -EFAULT;
  814. }
  815. print_hex_dump_debug("(out): ", DUMP_PREFIX_OFFSET, 16, 2, data,
  816. buf_len, false);
  817. return ret;
  818. }
  819. int sev_do_cmd(int cmd, void *data, int *psp_ret)
  820. {
  821. int rc;
  822. mutex_lock(&sev_cmd_mutex);
  823. rc = __sev_do_cmd_locked(cmd, data, psp_ret);
  824. mutex_unlock(&sev_cmd_mutex);
  825. return rc;
  826. }
  827. EXPORT_SYMBOL_GPL(sev_do_cmd);
  828. static int __sev_init_locked(int *error)
  829. {
  830. struct sev_data_init data;
  831. memset(&data, 0, sizeof(data));
  832. if (sev_es_tmr) {
  833. /*
  834. * Do not include the encryption mask on the physical
  835. * address of the TMR (firmware should clear it anyway).
  836. */
  837. data.tmr_address = __pa(sev_es_tmr);
  838. data.flags |= SEV_INIT_FLAGS_SEV_ES;
  839. data.tmr_len = sev_es_tmr_size;
  840. }
  841. return __sev_do_cmd_locked(SEV_CMD_INIT, &data, error);
  842. }
  843. static int __sev_init_ex_locked(int *error)
  844. {
  845. struct sev_data_init_ex data;
  846. memset(&data, 0, sizeof(data));
  847. data.length = sizeof(data);
  848. data.nv_address = __psp_pa(sev_init_ex_buffer);
  849. data.nv_len = NV_LENGTH;
  850. if (sev_es_tmr) {
  851. /*
  852. * Do not include the encryption mask on the physical
  853. * address of the TMR (firmware should clear it anyway).
  854. */
  855. data.tmr_address = __pa(sev_es_tmr);
  856. data.flags |= SEV_INIT_FLAGS_SEV_ES;
  857. data.tmr_len = sev_es_tmr_size;
  858. }
  859. return __sev_do_cmd_locked(SEV_CMD_INIT_EX, &data, error);
  860. }
  861. static inline int __sev_do_init_locked(int *psp_ret)
  862. {
  863. if (sev_init_ex_buffer)
  864. return __sev_init_ex_locked(psp_ret);
  865. else
  866. return __sev_init_locked(psp_ret);
  867. }
  868. static void snp_set_hsave_pa(void *arg)
  869. {
  870. wrmsrl(MSR_VM_HSAVE_PA, 0);
  871. }
  872. static int snp_filter_reserved_mem_regions(struct resource *rs, void *arg)
  873. {
  874. struct sev_data_range_list *range_list = arg;
  875. struct sev_data_range *range = &range_list->ranges[range_list->num_elements];
  876. size_t size;
  877. /*
  878. * Ensure the list of HV_FIXED pages that will be passed to firmware
  879. * do not exceed the page-sized argument buffer.
  880. */
  881. if ((range_list->num_elements * sizeof(struct sev_data_range) +
  882. sizeof(struct sev_data_range_list)) > PAGE_SIZE)
  883. return -E2BIG;
  884. switch (rs->desc) {
  885. case E820_TYPE_RESERVED:
  886. case E820_TYPE_PMEM:
  887. case E820_TYPE_ACPI:
  888. range->base = rs->start & PAGE_MASK;
  889. size = PAGE_ALIGN((rs->end + 1) - rs->start);
  890. range->page_count = size >> PAGE_SHIFT;
  891. range_list->num_elements++;
  892. break;
  893. default:
  894. break;
  895. }
  896. return 0;
  897. }
  898. static int __sev_snp_init_locked(int *error)
  899. {
  900. struct psp_device *psp = psp_master;
  901. struct sev_data_snp_init_ex data;
  902. struct sev_device *sev;
  903. void *arg = &data;
  904. int cmd, rc = 0;
  905. if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP))
  906. return -ENODEV;
  907. sev = psp->sev_data;
  908. if (sev->snp_initialized)
  909. return 0;
  910. if (!sev_version_greater_or_equal(SNP_MIN_API_MAJOR, SNP_MIN_API_MINOR)) {
  911. dev_dbg(sev->dev, "SEV-SNP support requires firmware version >= %d:%d\n",
  912. SNP_MIN_API_MAJOR, SNP_MIN_API_MINOR);
  913. return 0;
  914. }
  915. /* SNP_INIT requires MSR_VM_HSAVE_PA to be cleared on all CPUs. */
  916. on_each_cpu(snp_set_hsave_pa, NULL, 1);
  917. /*
  918. * Starting in SNP firmware v1.52, the SNP_INIT_EX command takes a list
  919. * of system physical address ranges to convert into HV-fixed page
  920. * states during the RMP initialization. For instance, the memory that
  921. * UEFI reserves should be included in the that list. This allows system
  922. * components that occasionally write to memory (e.g. logging to UEFI
  923. * reserved regions) to not fail due to RMP initialization and SNP
  924. * enablement.
  925. *
  926. */
  927. if (sev_version_greater_or_equal(SNP_MIN_API_MAJOR, 52)) {
  928. /*
  929. * Firmware checks that the pages containing the ranges enumerated
  930. * in the RANGES structure are either in the default page state or in the
  931. * firmware page state.
  932. */
  933. snp_range_list = kzalloc(PAGE_SIZE, GFP_KERNEL);
  934. if (!snp_range_list) {
  935. dev_err(sev->dev,
  936. "SEV: SNP_INIT_EX range list memory allocation failed\n");
  937. return -ENOMEM;
  938. }
  939. /*
  940. * Retrieve all reserved memory regions from the e820 memory map
  941. * to be setup as HV-fixed pages.
  942. */
  943. rc = walk_iomem_res_desc(IORES_DESC_NONE, IORESOURCE_MEM, 0, ~0,
  944. snp_range_list, snp_filter_reserved_mem_regions);
  945. if (rc) {
  946. dev_err(sev->dev,
  947. "SEV: SNP_INIT_EX walk_iomem_res_desc failed rc = %d\n", rc);
  948. return rc;
  949. }
  950. memset(&data, 0, sizeof(data));
  951. data.init_rmp = 1;
  952. data.list_paddr_en = 1;
  953. data.list_paddr = __psp_pa(snp_range_list);
  954. cmd = SEV_CMD_SNP_INIT_EX;
  955. } else {
  956. cmd = SEV_CMD_SNP_INIT;
  957. arg = NULL;
  958. }
  959. /*
  960. * The following sequence must be issued before launching the first SNP
  961. * guest to ensure all dirty cache lines are flushed, including from
  962. * updates to the RMP table itself via the RMPUPDATE instruction:
  963. *
  964. * - WBINVD on all running CPUs
  965. * - SEV_CMD_SNP_INIT[_EX] firmware command
  966. * - WBINVD on all running CPUs
  967. * - SEV_CMD_SNP_DF_FLUSH firmware command
  968. */
  969. wbinvd_on_all_cpus();
  970. rc = __sev_do_cmd_locked(cmd, arg, error);
  971. if (rc)
  972. return rc;
  973. /* Prepare for first SNP guest launch after INIT. */
  974. wbinvd_on_all_cpus();
  975. rc = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, error);
  976. if (rc)
  977. return rc;
  978. sev->snp_initialized = true;
  979. dev_dbg(sev->dev, "SEV-SNP firmware initialized\n");
  980. sev_es_tmr_size = SNP_TMR_SIZE;
  981. return rc;
  982. }
  983. static void __sev_platform_init_handle_tmr(struct sev_device *sev)
  984. {
  985. if (sev_es_tmr)
  986. return;
  987. /* Obtain the TMR memory area for SEV-ES use */
  988. sev_es_tmr = sev_fw_alloc(sev_es_tmr_size);
  989. if (sev_es_tmr) {
  990. /* Must flush the cache before giving it to the firmware */
  991. if (!sev->snp_initialized)
  992. clflush_cache_range(sev_es_tmr, sev_es_tmr_size);
  993. } else {
  994. dev_warn(sev->dev, "SEV: TMR allocation failed, SEV-ES support unavailable\n");
  995. }
  996. }
  997. /*
  998. * If an init_ex_path is provided allocate a buffer for the file and
  999. * read in the contents. Additionally, if SNP is initialized, convert
  1000. * the buffer pages to firmware pages.
  1001. */
  1002. static int __sev_platform_init_handle_init_ex_path(struct sev_device *sev)
  1003. {
  1004. struct page *page;
  1005. int rc;
  1006. if (!init_ex_path)
  1007. return 0;
  1008. if (sev_init_ex_buffer)
  1009. return 0;
  1010. page = alloc_pages(GFP_KERNEL, get_order(NV_LENGTH));
  1011. if (!page) {
  1012. dev_err(sev->dev, "SEV: INIT_EX NV memory allocation failed\n");
  1013. return -ENOMEM;
  1014. }
  1015. sev_init_ex_buffer = page_address(page);
  1016. rc = sev_read_init_ex_file();
  1017. if (rc)
  1018. return rc;
  1019. /* If SEV-SNP is initialized, transition to firmware page. */
  1020. if (sev->snp_initialized) {
  1021. unsigned long npages;
  1022. npages = 1UL << get_order(NV_LENGTH);
  1023. if (rmp_mark_pages_firmware(__pa(sev_init_ex_buffer), npages, false)) {
  1024. dev_err(sev->dev, "SEV: INIT_EX NV memory page state change failed.\n");
  1025. return -ENOMEM;
  1026. }
  1027. }
  1028. return 0;
  1029. }
  1030. static int __sev_platform_init_locked(int *error)
  1031. {
  1032. int rc, psp_ret = SEV_RET_NO_FW_CALL;
  1033. struct sev_device *sev;
  1034. if (!psp_master || !psp_master->sev_data)
  1035. return -ENODEV;
  1036. sev = psp_master->sev_data;
  1037. if (sev->state == SEV_STATE_INIT)
  1038. return 0;
  1039. __sev_platform_init_handle_tmr(sev);
  1040. rc = __sev_platform_init_handle_init_ex_path(sev);
  1041. if (rc)
  1042. return rc;
  1043. rc = __sev_do_init_locked(&psp_ret);
  1044. if (rc && psp_ret == SEV_RET_SECURE_DATA_INVALID) {
  1045. /*
  1046. * Initialization command returned an integrity check failure
  1047. * status code, meaning that firmware load and validation of SEV
  1048. * related persistent data has failed. Retrying the
  1049. * initialization function should succeed by replacing the state
  1050. * with a reset state.
  1051. */
  1052. dev_err(sev->dev,
  1053. "SEV: retrying INIT command because of SECURE_DATA_INVALID error. Retrying once to reset PSP SEV state.");
  1054. rc = __sev_do_init_locked(&psp_ret);
  1055. }
  1056. if (error)
  1057. *error = psp_ret;
  1058. if (rc)
  1059. return rc;
  1060. sev->state = SEV_STATE_INIT;
  1061. /* Prepare for first SEV guest launch after INIT */
  1062. wbinvd_on_all_cpus();
  1063. rc = __sev_do_cmd_locked(SEV_CMD_DF_FLUSH, NULL, error);
  1064. if (rc)
  1065. return rc;
  1066. dev_dbg(sev->dev, "SEV firmware initialized\n");
  1067. dev_info(sev->dev, "SEV API:%d.%d build:%d\n", sev->api_major,
  1068. sev->api_minor, sev->build);
  1069. return 0;
  1070. }
  1071. static int _sev_platform_init_locked(struct sev_platform_init_args *args)
  1072. {
  1073. struct sev_device *sev;
  1074. int rc;
  1075. if (!psp_master || !psp_master->sev_data)
  1076. return -ENODEV;
  1077. sev = psp_master->sev_data;
  1078. if (sev->state == SEV_STATE_INIT)
  1079. return 0;
  1080. /*
  1081. * Legacy guests cannot be running while SNP_INIT(_EX) is executing,
  1082. * so perform SEV-SNP initialization at probe time.
  1083. */
  1084. rc = __sev_snp_init_locked(&args->error);
  1085. if (rc && rc != -ENODEV) {
  1086. /*
  1087. * Don't abort the probe if SNP INIT failed,
  1088. * continue to initialize the legacy SEV firmware.
  1089. */
  1090. dev_err(sev->dev, "SEV-SNP: failed to INIT rc %d, error %#x\n",
  1091. rc, args->error);
  1092. }
  1093. /* Defer legacy SEV/SEV-ES support if allowed by caller/module. */
  1094. if (args->probe && !psp_init_on_probe)
  1095. return 0;
  1096. return __sev_platform_init_locked(&args->error);
  1097. }
  1098. int sev_platform_init(struct sev_platform_init_args *args)
  1099. {
  1100. int rc;
  1101. mutex_lock(&sev_cmd_mutex);
  1102. rc = _sev_platform_init_locked(args);
  1103. mutex_unlock(&sev_cmd_mutex);
  1104. return rc;
  1105. }
  1106. EXPORT_SYMBOL_GPL(sev_platform_init);
  1107. static int __sev_platform_shutdown_locked(int *error)
  1108. {
  1109. struct psp_device *psp = psp_master;
  1110. struct sev_device *sev;
  1111. int ret;
  1112. if (!psp || !psp->sev_data)
  1113. return 0;
  1114. sev = psp->sev_data;
  1115. if (sev->state == SEV_STATE_UNINIT)
  1116. return 0;
  1117. ret = __sev_do_cmd_locked(SEV_CMD_SHUTDOWN, NULL, error);
  1118. if (ret)
  1119. return ret;
  1120. sev->state = SEV_STATE_UNINIT;
  1121. dev_dbg(sev->dev, "SEV firmware shutdown\n");
  1122. return ret;
  1123. }
  1124. static int sev_get_platform_state(int *state, int *error)
  1125. {
  1126. struct sev_user_data_status data;
  1127. int rc;
  1128. rc = __sev_do_cmd_locked(SEV_CMD_PLATFORM_STATUS, &data, error);
  1129. if (rc)
  1130. return rc;
  1131. *state = data.state;
  1132. return rc;
  1133. }
  1134. static int sev_ioctl_do_reset(struct sev_issue_cmd *argp, bool writable)
  1135. {
  1136. int state, rc;
  1137. if (!writable)
  1138. return -EPERM;
  1139. /*
  1140. * The SEV spec requires that FACTORY_RESET must be issued in
  1141. * UNINIT state. Before we go further lets check if any guest is
  1142. * active.
  1143. *
  1144. * If FW is in WORKING state then deny the request otherwise issue
  1145. * SHUTDOWN command do INIT -> UNINIT before issuing the FACTORY_RESET.
  1146. *
  1147. */
  1148. rc = sev_get_platform_state(&state, &argp->error);
  1149. if (rc)
  1150. return rc;
  1151. if (state == SEV_STATE_WORKING)
  1152. return -EBUSY;
  1153. if (state == SEV_STATE_INIT) {
  1154. rc = __sev_platform_shutdown_locked(&argp->error);
  1155. if (rc)
  1156. return rc;
  1157. }
  1158. return __sev_do_cmd_locked(SEV_CMD_FACTORY_RESET, NULL, &argp->error);
  1159. }
  1160. static int sev_ioctl_do_platform_status(struct sev_issue_cmd *argp)
  1161. {
  1162. struct sev_user_data_status data;
  1163. int ret;
  1164. memset(&data, 0, sizeof(data));
  1165. ret = __sev_do_cmd_locked(SEV_CMD_PLATFORM_STATUS, &data, &argp->error);
  1166. if (ret)
  1167. return ret;
  1168. if (copy_to_user((void __user *)argp->data, &data, sizeof(data)))
  1169. ret = -EFAULT;
  1170. return ret;
  1171. }
  1172. static int sev_ioctl_do_pek_pdh_gen(int cmd, struct sev_issue_cmd *argp, bool writable)
  1173. {
  1174. struct sev_device *sev = psp_master->sev_data;
  1175. int rc;
  1176. if (!writable)
  1177. return -EPERM;
  1178. if (sev->state == SEV_STATE_UNINIT) {
  1179. rc = __sev_platform_init_locked(&argp->error);
  1180. if (rc)
  1181. return rc;
  1182. }
  1183. return __sev_do_cmd_locked(cmd, NULL, &argp->error);
  1184. }
  1185. static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
  1186. {
  1187. struct sev_device *sev = psp_master->sev_data;
  1188. struct sev_user_data_pek_csr input;
  1189. struct sev_data_pek_csr data;
  1190. void __user *input_address;
  1191. void *blob = NULL;
  1192. int ret;
  1193. if (!writable)
  1194. return -EPERM;
  1195. if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
  1196. return -EFAULT;
  1197. memset(&data, 0, sizeof(data));
  1198. /* userspace wants to query CSR length */
  1199. if (!input.address || !input.length)
  1200. goto cmd;
  1201. /* allocate a physically contiguous buffer to store the CSR blob */
  1202. input_address = (void __user *)input.address;
  1203. if (input.length > SEV_FW_BLOB_MAX_SIZE)
  1204. return -EFAULT;
  1205. blob = kzalloc(input.length, GFP_KERNEL);
  1206. if (!blob)
  1207. return -ENOMEM;
  1208. data.address = __psp_pa(blob);
  1209. data.len = input.length;
  1210. cmd:
  1211. if (sev->state == SEV_STATE_UNINIT) {
  1212. ret = __sev_platform_init_locked(&argp->error);
  1213. if (ret)
  1214. goto e_free_blob;
  1215. }
  1216. ret = __sev_do_cmd_locked(SEV_CMD_PEK_CSR, &data, &argp->error);
  1217. /* If we query the CSR length, FW responded with expected data. */
  1218. input.length = data.len;
  1219. if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
  1220. ret = -EFAULT;
  1221. goto e_free_blob;
  1222. }
  1223. if (blob) {
  1224. if (copy_to_user(input_address, blob, input.length))
  1225. ret = -EFAULT;
  1226. }
  1227. e_free_blob:
  1228. kfree(blob);
  1229. return ret;
  1230. }
  1231. void *psp_copy_user_blob(u64 uaddr, u32 len)
  1232. {
  1233. if (!uaddr || !len)
  1234. return ERR_PTR(-EINVAL);
  1235. /* verify that blob length does not exceed our limit */
  1236. if (len > SEV_FW_BLOB_MAX_SIZE)
  1237. return ERR_PTR(-EINVAL);
  1238. return memdup_user((void __user *)uaddr, len);
  1239. }
  1240. EXPORT_SYMBOL_GPL(psp_copy_user_blob);
  1241. static int sev_get_api_version(void)
  1242. {
  1243. struct sev_device *sev = psp_master->sev_data;
  1244. struct sev_user_data_status status;
  1245. int error = 0, ret;
  1246. ret = sev_platform_status(&status, &error);
  1247. if (ret) {
  1248. dev_err(sev->dev,
  1249. "SEV: failed to get status. Error: %#x\n", error);
  1250. return 1;
  1251. }
  1252. sev->api_major = status.api_major;
  1253. sev->api_minor = status.api_minor;
  1254. sev->build = status.build;
  1255. sev->state = status.state;
  1256. return 0;
  1257. }
  1258. static int sev_get_firmware(struct device *dev,
  1259. const struct firmware **firmware)
  1260. {
  1261. char fw_name_specific[SEV_FW_NAME_SIZE];
  1262. char fw_name_subset[SEV_FW_NAME_SIZE];
  1263. snprintf(fw_name_specific, sizeof(fw_name_specific),
  1264. "amd/amd_sev_fam%.2xh_model%.2xh.sbin",
  1265. boot_cpu_data.x86, boot_cpu_data.x86_model);
  1266. snprintf(fw_name_subset, sizeof(fw_name_subset),
  1267. "amd/amd_sev_fam%.2xh_model%.1xxh.sbin",
  1268. boot_cpu_data.x86, (boot_cpu_data.x86_model & 0xf0) >> 4);
  1269. /* Check for SEV FW for a particular model.
  1270. * Ex. amd_sev_fam17h_model00h.sbin for Family 17h Model 00h
  1271. *
  1272. * or
  1273. *
  1274. * Check for SEV FW common to a subset of models.
  1275. * Ex. amd_sev_fam17h_model0xh.sbin for
  1276. * Family 17h Model 00h -- Family 17h Model 0Fh
  1277. *
  1278. * or
  1279. *
  1280. * Fall-back to using generic name: sev.fw
  1281. */
  1282. if ((firmware_request_nowarn(firmware, fw_name_specific, dev) >= 0) ||
  1283. (firmware_request_nowarn(firmware, fw_name_subset, dev) >= 0) ||
  1284. (firmware_request_nowarn(firmware, SEV_FW_FILE, dev) >= 0))
  1285. return 0;
  1286. return -ENOENT;
  1287. }
  1288. /* Don't fail if SEV FW couldn't be updated. Continue with existing SEV FW */
  1289. static int sev_update_firmware(struct device *dev)
  1290. {
  1291. struct sev_data_download_firmware *data;
  1292. const struct firmware *firmware;
  1293. int ret, error, order;
  1294. struct page *p;
  1295. u64 data_size;
  1296. if (!sev_version_greater_or_equal(0, 15)) {
  1297. dev_dbg(dev, "DOWNLOAD_FIRMWARE not supported\n");
  1298. return -1;
  1299. }
  1300. if (sev_get_firmware(dev, &firmware) == -ENOENT) {
  1301. dev_dbg(dev, "No SEV firmware file present\n");
  1302. return -1;
  1303. }
  1304. /*
  1305. * SEV FW expects the physical address given to it to be 32
  1306. * byte aligned. Memory allocated has structure placed at the
  1307. * beginning followed by the firmware being passed to the SEV
  1308. * FW. Allocate enough memory for data structure + alignment
  1309. * padding + SEV FW.
  1310. */
  1311. data_size = ALIGN(sizeof(struct sev_data_download_firmware), 32);
  1312. order = get_order(firmware->size + data_size);
  1313. p = alloc_pages(GFP_KERNEL, order);
  1314. if (!p) {
  1315. ret = -1;
  1316. goto fw_err;
  1317. }
  1318. /*
  1319. * Copy firmware data to a kernel allocated contiguous
  1320. * memory region.
  1321. */
  1322. data = page_address(p);
  1323. memcpy(page_address(p) + data_size, firmware->data, firmware->size);
  1324. data->address = __psp_pa(page_address(p) + data_size);
  1325. data->len = firmware->size;
  1326. ret = sev_do_cmd(SEV_CMD_DOWNLOAD_FIRMWARE, data, &error);
  1327. /*
  1328. * A quirk for fixing the committed TCB version, when upgrading from
  1329. * earlier firmware version than 1.50.
  1330. */
  1331. if (!ret && !sev_version_greater_or_equal(1, 50))
  1332. ret = sev_do_cmd(SEV_CMD_DOWNLOAD_FIRMWARE, data, &error);
  1333. if (ret)
  1334. dev_dbg(dev, "Failed to update SEV firmware: %#x\n", error);
  1335. __free_pages(p, order);
  1336. fw_err:
  1337. release_firmware(firmware);
  1338. return ret;
  1339. }
  1340. static int __sev_snp_shutdown_locked(int *error, bool panic)
  1341. {
  1342. struct psp_device *psp = psp_master;
  1343. struct sev_device *sev;
  1344. struct sev_data_snp_shutdown_ex data;
  1345. int ret;
  1346. if (!psp || !psp->sev_data)
  1347. return 0;
  1348. sev = psp->sev_data;
  1349. if (!sev->snp_initialized)
  1350. return 0;
  1351. memset(&data, 0, sizeof(data));
  1352. data.len = sizeof(data);
  1353. data.iommu_snp_shutdown = 1;
  1354. /*
  1355. * If invoked during panic handling, local interrupts are disabled
  1356. * and all CPUs are stopped, so wbinvd_on_all_cpus() can't be called.
  1357. * In that case, a wbinvd() is done on remote CPUs via the NMI
  1358. * callback, so only a local wbinvd() is needed here.
  1359. */
  1360. if (!panic)
  1361. wbinvd_on_all_cpus();
  1362. else
  1363. wbinvd();
  1364. ret = __sev_do_cmd_locked(SEV_CMD_SNP_SHUTDOWN_EX, &data, error);
  1365. /* SHUTDOWN may require DF_FLUSH */
  1366. if (*error == SEV_RET_DFFLUSH_REQUIRED) {
  1367. ret = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, NULL);
  1368. if (ret) {
  1369. dev_err(sev->dev, "SEV-SNP DF_FLUSH failed\n");
  1370. return ret;
  1371. }
  1372. /* reissue the shutdown command */
  1373. ret = __sev_do_cmd_locked(SEV_CMD_SNP_SHUTDOWN_EX, &data,
  1374. error);
  1375. }
  1376. if (ret) {
  1377. dev_err(sev->dev, "SEV-SNP firmware shutdown failed\n");
  1378. return ret;
  1379. }
  1380. /*
  1381. * SNP_SHUTDOWN_EX with IOMMU_SNP_SHUTDOWN set to 1 disables SNP
  1382. * enforcement by the IOMMU and also transitions all pages
  1383. * associated with the IOMMU to the Reclaim state.
  1384. * Firmware was transitioning the IOMMU pages to Hypervisor state
  1385. * before version 1.53. But, accounting for the number of assigned
  1386. * 4kB pages in a 2M page was done incorrectly by not transitioning
  1387. * to the Reclaim state. This resulted in RMP #PF when later accessing
  1388. * the 2M page containing those pages during kexec boot. Hence, the
  1389. * firmware now transitions these pages to Reclaim state and hypervisor
  1390. * needs to transition these pages to shared state. SNP Firmware
  1391. * version 1.53 and above are needed for kexec boot.
  1392. */
  1393. ret = amd_iommu_snp_disable();
  1394. if (ret) {
  1395. dev_err(sev->dev, "SNP IOMMU shutdown failed\n");
  1396. return ret;
  1397. }
  1398. sev->snp_initialized = false;
  1399. dev_dbg(sev->dev, "SEV-SNP firmware shutdown\n");
  1400. return ret;
  1401. }
  1402. static int sev_ioctl_do_pek_import(struct sev_issue_cmd *argp, bool writable)
  1403. {
  1404. struct sev_device *sev = psp_master->sev_data;
  1405. struct sev_user_data_pek_cert_import input;
  1406. struct sev_data_pek_cert_import data;
  1407. void *pek_blob, *oca_blob;
  1408. int ret;
  1409. if (!writable)
  1410. return -EPERM;
  1411. if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
  1412. return -EFAULT;
  1413. /* copy PEK certificate blobs from userspace */
  1414. pek_blob = psp_copy_user_blob(input.pek_cert_address, input.pek_cert_len);
  1415. if (IS_ERR(pek_blob))
  1416. return PTR_ERR(pek_blob);
  1417. data.reserved = 0;
  1418. data.pek_cert_address = __psp_pa(pek_blob);
  1419. data.pek_cert_len = input.pek_cert_len;
  1420. /* copy PEK certificate blobs from userspace */
  1421. oca_blob = psp_copy_user_blob(input.oca_cert_address, input.oca_cert_len);
  1422. if (IS_ERR(oca_blob)) {
  1423. ret = PTR_ERR(oca_blob);
  1424. goto e_free_pek;
  1425. }
  1426. data.oca_cert_address = __psp_pa(oca_blob);
  1427. data.oca_cert_len = input.oca_cert_len;
  1428. /* If platform is not in INIT state then transition it to INIT */
  1429. if (sev->state != SEV_STATE_INIT) {
  1430. ret = __sev_platform_init_locked(&argp->error);
  1431. if (ret)
  1432. goto e_free_oca;
  1433. }
  1434. ret = __sev_do_cmd_locked(SEV_CMD_PEK_CERT_IMPORT, &data, &argp->error);
  1435. e_free_oca:
  1436. kfree(oca_blob);
  1437. e_free_pek:
  1438. kfree(pek_blob);
  1439. return ret;
  1440. }
  1441. static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
  1442. {
  1443. struct sev_user_data_get_id2 input;
  1444. struct sev_data_get_id data;
  1445. void __user *input_address;
  1446. void *id_blob = NULL;
  1447. int ret;
  1448. /* SEV GET_ID is available from SEV API v0.16 and up */
  1449. if (!sev_version_greater_or_equal(0, 16))
  1450. return -ENOTSUPP;
  1451. if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
  1452. return -EFAULT;
  1453. input_address = (void __user *)input.address;
  1454. if (input.address && input.length) {
  1455. /*
  1456. * The length of the ID shouldn't be assumed by software since
  1457. * it may change in the future. The allocation size is limited
  1458. * to 1 << (PAGE_SHIFT + MAX_PAGE_ORDER) by the page allocator.
  1459. * If the allocation fails, simply return ENOMEM rather than
  1460. * warning in the kernel log.
  1461. */
  1462. id_blob = kzalloc(input.length, GFP_KERNEL | __GFP_NOWARN);
  1463. if (!id_blob)
  1464. return -ENOMEM;
  1465. data.address = __psp_pa(id_blob);
  1466. data.len = input.length;
  1467. } else {
  1468. data.address = 0;
  1469. data.len = 0;
  1470. }
  1471. ret = __sev_do_cmd_locked(SEV_CMD_GET_ID, &data, &argp->error);
  1472. /*
  1473. * Firmware will return the length of the ID value (either the minimum
  1474. * required length or the actual length written), return it to the user.
  1475. */
  1476. input.length = data.len;
  1477. if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
  1478. ret = -EFAULT;
  1479. goto e_free;
  1480. }
  1481. if (id_blob) {
  1482. if (copy_to_user(input_address, id_blob, data.len)) {
  1483. ret = -EFAULT;
  1484. goto e_free;
  1485. }
  1486. }
  1487. e_free:
  1488. kfree(id_blob);
  1489. return ret;
  1490. }
  1491. static int sev_ioctl_do_get_id(struct sev_issue_cmd *argp)
  1492. {
  1493. struct sev_data_get_id *data;
  1494. u64 data_size, user_size;
  1495. void *id_blob, *mem;
  1496. int ret;
  1497. /* SEV GET_ID available from SEV API v0.16 and up */
  1498. if (!sev_version_greater_or_equal(0, 16))
  1499. return -ENOTSUPP;
  1500. /* SEV FW expects the buffer it fills with the ID to be
  1501. * 8-byte aligned. Memory allocated should be enough to
  1502. * hold data structure + alignment padding + memory
  1503. * where SEV FW writes the ID.
  1504. */
  1505. data_size = ALIGN(sizeof(struct sev_data_get_id), 8);
  1506. user_size = sizeof(struct sev_user_data_get_id);
  1507. mem = kzalloc(data_size + user_size, GFP_KERNEL);
  1508. if (!mem)
  1509. return -ENOMEM;
  1510. data = mem;
  1511. id_blob = mem + data_size;
  1512. data->address = __psp_pa(id_blob);
  1513. data->len = user_size;
  1514. ret = __sev_do_cmd_locked(SEV_CMD_GET_ID, data, &argp->error);
  1515. if (!ret) {
  1516. if (copy_to_user((void __user *)argp->data, id_blob, data->len))
  1517. ret = -EFAULT;
  1518. }
  1519. kfree(mem);
  1520. return ret;
  1521. }
  1522. static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
  1523. {
  1524. struct sev_device *sev = psp_master->sev_data;
  1525. struct sev_user_data_pdh_cert_export input;
  1526. void *pdh_blob = NULL, *cert_blob = NULL;
  1527. struct sev_data_pdh_cert_export data;
  1528. void __user *input_cert_chain_address;
  1529. void __user *input_pdh_cert_address;
  1530. int ret;
  1531. /* If platform is not in INIT state then transition it to INIT. */
  1532. if (sev->state != SEV_STATE_INIT) {
  1533. if (!writable)
  1534. return -EPERM;
  1535. ret = __sev_platform_init_locked(&argp->error);
  1536. if (ret)
  1537. return ret;
  1538. }
  1539. if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
  1540. return -EFAULT;
  1541. memset(&data, 0, sizeof(data));
  1542. /* Userspace wants to query the certificate length. */
  1543. if (!input.pdh_cert_address ||
  1544. !input.pdh_cert_len ||
  1545. !input.cert_chain_address)
  1546. goto cmd;
  1547. input_pdh_cert_address = (void __user *)input.pdh_cert_address;
  1548. input_cert_chain_address = (void __user *)input.cert_chain_address;
  1549. /* Allocate a physically contiguous buffer to store the PDH blob. */
  1550. if (input.pdh_cert_len > SEV_FW_BLOB_MAX_SIZE)
  1551. return -EFAULT;
  1552. /* Allocate a physically contiguous buffer to store the cert chain blob. */
  1553. if (input.cert_chain_len > SEV_FW_BLOB_MAX_SIZE)
  1554. return -EFAULT;
  1555. pdh_blob = kzalloc(input.pdh_cert_len, GFP_KERNEL);
  1556. if (!pdh_blob)
  1557. return -ENOMEM;
  1558. data.pdh_cert_address = __psp_pa(pdh_blob);
  1559. data.pdh_cert_len = input.pdh_cert_len;
  1560. cert_blob = kzalloc(input.cert_chain_len, GFP_KERNEL);
  1561. if (!cert_blob) {
  1562. ret = -ENOMEM;
  1563. goto e_free_pdh;
  1564. }
  1565. data.cert_chain_address = __psp_pa(cert_blob);
  1566. data.cert_chain_len = input.cert_chain_len;
  1567. cmd:
  1568. ret = __sev_do_cmd_locked(SEV_CMD_PDH_CERT_EXPORT, &data, &argp->error);
  1569. /* If we query the length, FW responded with expected data. */
  1570. input.cert_chain_len = data.cert_chain_len;
  1571. input.pdh_cert_len = data.pdh_cert_len;
  1572. if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
  1573. ret = -EFAULT;
  1574. goto e_free_cert;
  1575. }
  1576. if (pdh_blob) {
  1577. if (copy_to_user(input_pdh_cert_address,
  1578. pdh_blob, input.pdh_cert_len)) {
  1579. ret = -EFAULT;
  1580. goto e_free_cert;
  1581. }
  1582. }
  1583. if (cert_blob) {
  1584. if (copy_to_user(input_cert_chain_address,
  1585. cert_blob, input.cert_chain_len))
  1586. ret = -EFAULT;
  1587. }
  1588. e_free_cert:
  1589. kfree(cert_blob);
  1590. e_free_pdh:
  1591. kfree(pdh_blob);
  1592. return ret;
  1593. }
  1594. static int sev_ioctl_do_snp_platform_status(struct sev_issue_cmd *argp)
  1595. {
  1596. struct sev_device *sev = psp_master->sev_data;
  1597. struct sev_data_snp_addr buf;
  1598. struct page *status_page;
  1599. void *data;
  1600. int ret;
  1601. if (!sev->snp_initialized || !argp->data)
  1602. return -EINVAL;
  1603. status_page = alloc_page(GFP_KERNEL_ACCOUNT);
  1604. if (!status_page)
  1605. return -ENOMEM;
  1606. data = page_address(status_page);
  1607. /*
  1608. * Firmware expects status page to be in firmware-owned state, otherwise
  1609. * it will report firmware error code INVALID_PAGE_STATE (0x1A).
  1610. */
  1611. if (rmp_mark_pages_firmware(__pa(data), 1, true)) {
  1612. ret = -EFAULT;
  1613. goto cleanup;
  1614. }
  1615. buf.address = __psp_pa(data);
  1616. ret = __sev_do_cmd_locked(SEV_CMD_SNP_PLATFORM_STATUS, &buf, &argp->error);
  1617. /*
  1618. * Status page will be transitioned to Reclaim state upon success, or
  1619. * left in Firmware state in failure. Use snp_reclaim_pages() to
  1620. * transition either case back to Hypervisor-owned state.
  1621. */
  1622. if (snp_reclaim_pages(__pa(data), 1, true))
  1623. return -EFAULT;
  1624. if (ret)
  1625. goto cleanup;
  1626. if (copy_to_user((void __user *)argp->data, data,
  1627. sizeof(struct sev_user_data_snp_status)))
  1628. ret = -EFAULT;
  1629. cleanup:
  1630. __free_pages(status_page, 0);
  1631. return ret;
  1632. }
  1633. static int sev_ioctl_do_snp_commit(struct sev_issue_cmd *argp)
  1634. {
  1635. struct sev_device *sev = psp_master->sev_data;
  1636. struct sev_data_snp_commit buf;
  1637. if (!sev->snp_initialized)
  1638. return -EINVAL;
  1639. buf.len = sizeof(buf);
  1640. return __sev_do_cmd_locked(SEV_CMD_SNP_COMMIT, &buf, &argp->error);
  1641. }
  1642. static int sev_ioctl_do_snp_set_config(struct sev_issue_cmd *argp, bool writable)
  1643. {
  1644. struct sev_device *sev = psp_master->sev_data;
  1645. struct sev_user_data_snp_config config;
  1646. if (!sev->snp_initialized || !argp->data)
  1647. return -EINVAL;
  1648. if (!writable)
  1649. return -EPERM;
  1650. if (copy_from_user(&config, (void __user *)argp->data, sizeof(config)))
  1651. return -EFAULT;
  1652. return __sev_do_cmd_locked(SEV_CMD_SNP_CONFIG, &config, &argp->error);
  1653. }
  1654. static int sev_ioctl_do_snp_vlek_load(struct sev_issue_cmd *argp, bool writable)
  1655. {
  1656. struct sev_device *sev = psp_master->sev_data;
  1657. struct sev_user_data_snp_vlek_load input;
  1658. void *blob;
  1659. int ret;
  1660. if (!sev->snp_initialized || !argp->data)
  1661. return -EINVAL;
  1662. if (!writable)
  1663. return -EPERM;
  1664. if (copy_from_user(&input, u64_to_user_ptr(argp->data), sizeof(input)))
  1665. return -EFAULT;
  1666. if (input.len != sizeof(input) || input.vlek_wrapped_version != 0)
  1667. return -EINVAL;
  1668. blob = psp_copy_user_blob(input.vlek_wrapped_address,
  1669. sizeof(struct sev_user_data_snp_wrapped_vlek_hashstick));
  1670. if (IS_ERR(blob))
  1671. return PTR_ERR(blob);
  1672. input.vlek_wrapped_address = __psp_pa(blob);
  1673. ret = __sev_do_cmd_locked(SEV_CMD_SNP_VLEK_LOAD, &input, &argp->error);
  1674. kfree(blob);
  1675. return ret;
  1676. }
  1677. static long sev_ioctl(struct file *file, unsigned int ioctl, unsigned long arg)
  1678. {
  1679. void __user *argp = (void __user *)arg;
  1680. struct sev_issue_cmd input;
  1681. int ret = -EFAULT;
  1682. bool writable = file->f_mode & FMODE_WRITE;
  1683. if (!psp_master || !psp_master->sev_data)
  1684. return -ENODEV;
  1685. if (ioctl != SEV_ISSUE_CMD)
  1686. return -EINVAL;
  1687. if (copy_from_user(&input, argp, sizeof(struct sev_issue_cmd)))
  1688. return -EFAULT;
  1689. if (input.cmd > SEV_MAX)
  1690. return -EINVAL;
  1691. mutex_lock(&sev_cmd_mutex);
  1692. switch (input.cmd) {
  1693. case SEV_FACTORY_RESET:
  1694. ret = sev_ioctl_do_reset(&input, writable);
  1695. break;
  1696. case SEV_PLATFORM_STATUS:
  1697. ret = sev_ioctl_do_platform_status(&input);
  1698. break;
  1699. case SEV_PEK_GEN:
  1700. ret = sev_ioctl_do_pek_pdh_gen(SEV_CMD_PEK_GEN, &input, writable);
  1701. break;
  1702. case SEV_PDH_GEN:
  1703. ret = sev_ioctl_do_pek_pdh_gen(SEV_CMD_PDH_GEN, &input, writable);
  1704. break;
  1705. case SEV_PEK_CSR:
  1706. ret = sev_ioctl_do_pek_csr(&input, writable);
  1707. break;
  1708. case SEV_PEK_CERT_IMPORT:
  1709. ret = sev_ioctl_do_pek_import(&input, writable);
  1710. break;
  1711. case SEV_PDH_CERT_EXPORT:
  1712. ret = sev_ioctl_do_pdh_export(&input, writable);
  1713. break;
  1714. case SEV_GET_ID:
  1715. pr_warn_once("SEV_GET_ID command is deprecated, use SEV_GET_ID2\n");
  1716. ret = sev_ioctl_do_get_id(&input);
  1717. break;
  1718. case SEV_GET_ID2:
  1719. ret = sev_ioctl_do_get_id2(&input);
  1720. break;
  1721. case SNP_PLATFORM_STATUS:
  1722. ret = sev_ioctl_do_snp_platform_status(&input);
  1723. break;
  1724. case SNP_COMMIT:
  1725. ret = sev_ioctl_do_snp_commit(&input);
  1726. break;
  1727. case SNP_SET_CONFIG:
  1728. ret = sev_ioctl_do_snp_set_config(&input, writable);
  1729. break;
  1730. case SNP_VLEK_LOAD:
  1731. ret = sev_ioctl_do_snp_vlek_load(&input, writable);
  1732. break;
  1733. default:
  1734. ret = -EINVAL;
  1735. goto out;
  1736. }
  1737. if (copy_to_user(argp, &input, sizeof(struct sev_issue_cmd)))
  1738. ret = -EFAULT;
  1739. out:
  1740. mutex_unlock(&sev_cmd_mutex);
  1741. return ret;
  1742. }
  1743. static const struct file_operations sev_fops = {
  1744. .owner = THIS_MODULE,
  1745. .unlocked_ioctl = sev_ioctl,
  1746. };
  1747. int sev_platform_status(struct sev_user_data_status *data, int *error)
  1748. {
  1749. return sev_do_cmd(SEV_CMD_PLATFORM_STATUS, data, error);
  1750. }
  1751. EXPORT_SYMBOL_GPL(sev_platform_status);
  1752. int sev_guest_deactivate(struct sev_data_deactivate *data, int *error)
  1753. {
  1754. return sev_do_cmd(SEV_CMD_DEACTIVATE, data, error);
  1755. }
  1756. EXPORT_SYMBOL_GPL(sev_guest_deactivate);
  1757. int sev_guest_activate(struct sev_data_activate *data, int *error)
  1758. {
  1759. return sev_do_cmd(SEV_CMD_ACTIVATE, data, error);
  1760. }
  1761. EXPORT_SYMBOL_GPL(sev_guest_activate);
  1762. int sev_guest_decommission(struct sev_data_decommission *data, int *error)
  1763. {
  1764. return sev_do_cmd(SEV_CMD_DECOMMISSION, data, error);
  1765. }
  1766. EXPORT_SYMBOL_GPL(sev_guest_decommission);
  1767. int sev_guest_df_flush(int *error)
  1768. {
  1769. return sev_do_cmd(SEV_CMD_DF_FLUSH, NULL, error);
  1770. }
  1771. EXPORT_SYMBOL_GPL(sev_guest_df_flush);
  1772. static void sev_exit(struct kref *ref)
  1773. {
  1774. misc_deregister(&misc_dev->misc);
  1775. kfree(misc_dev);
  1776. misc_dev = NULL;
  1777. }
  1778. static int sev_misc_init(struct sev_device *sev)
  1779. {
  1780. struct device *dev = sev->dev;
  1781. int ret;
  1782. /*
  1783. * SEV feature support can be detected on multiple devices but the SEV
  1784. * FW commands must be issued on the master. During probe, we do not
  1785. * know the master hence we create /dev/sev on the first device probe.
  1786. * sev_do_cmd() finds the right master device to which to issue the
  1787. * command to the firmware.
  1788. */
  1789. if (!misc_dev) {
  1790. struct miscdevice *misc;
  1791. misc_dev = kzalloc(sizeof(*misc_dev), GFP_KERNEL);
  1792. if (!misc_dev)
  1793. return -ENOMEM;
  1794. misc = &misc_dev->misc;
  1795. misc->minor = MISC_DYNAMIC_MINOR;
  1796. misc->name = DEVICE_NAME;
  1797. misc->fops = &sev_fops;
  1798. ret = misc_register(misc);
  1799. if (ret)
  1800. return ret;
  1801. kref_init(&misc_dev->refcount);
  1802. } else {
  1803. kref_get(&misc_dev->refcount);
  1804. }
  1805. init_waitqueue_head(&sev->int_queue);
  1806. sev->misc = misc_dev;
  1807. dev_dbg(dev, "registered SEV device\n");
  1808. return 0;
  1809. }
  1810. int sev_dev_init(struct psp_device *psp)
  1811. {
  1812. struct device *dev = psp->dev;
  1813. struct sev_device *sev;
  1814. int ret = -ENOMEM;
  1815. if (!boot_cpu_has(X86_FEATURE_SEV)) {
  1816. dev_info_once(dev, "SEV: memory encryption not enabled by BIOS\n");
  1817. return 0;
  1818. }
  1819. sev = devm_kzalloc(dev, sizeof(*sev), GFP_KERNEL);
  1820. if (!sev)
  1821. goto e_err;
  1822. sev->cmd_buf = (void *)devm_get_free_pages(dev, GFP_KERNEL, 1);
  1823. if (!sev->cmd_buf)
  1824. goto e_sev;
  1825. sev->cmd_buf_backup = (uint8_t *)sev->cmd_buf + PAGE_SIZE;
  1826. psp->sev_data = sev;
  1827. sev->dev = dev;
  1828. sev->psp = psp;
  1829. sev->io_regs = psp->io_regs;
  1830. sev->vdata = (struct sev_vdata *)psp->vdata->sev;
  1831. if (!sev->vdata) {
  1832. ret = -ENODEV;
  1833. dev_err(dev, "sev: missing driver data\n");
  1834. goto e_buf;
  1835. }
  1836. psp_set_sev_irq_handler(psp, sev_irq_handler, sev);
  1837. ret = sev_misc_init(sev);
  1838. if (ret)
  1839. goto e_irq;
  1840. dev_notice(dev, "sev enabled\n");
  1841. return 0;
  1842. e_irq:
  1843. psp_clear_sev_irq_handler(psp);
  1844. e_buf:
  1845. devm_free_pages(dev, (unsigned long)sev->cmd_buf);
  1846. e_sev:
  1847. devm_kfree(dev, sev);
  1848. e_err:
  1849. psp->sev_data = NULL;
  1850. dev_notice(dev, "sev initialization failed\n");
  1851. return ret;
  1852. }
  1853. static void __sev_firmware_shutdown(struct sev_device *sev, bool panic)
  1854. {
  1855. int error;
  1856. __sev_platform_shutdown_locked(NULL);
  1857. if (sev_es_tmr) {
  1858. /*
  1859. * The TMR area was encrypted, flush it from the cache.
  1860. *
  1861. * If invoked during panic handling, local interrupts are
  1862. * disabled and all CPUs are stopped, so wbinvd_on_all_cpus()
  1863. * can't be used. In that case, wbinvd() is done on remote CPUs
  1864. * via the NMI callback, and done for this CPU later during
  1865. * SNP shutdown, so wbinvd_on_all_cpus() can be skipped.
  1866. */
  1867. if (!panic)
  1868. wbinvd_on_all_cpus();
  1869. __snp_free_firmware_pages(virt_to_page(sev_es_tmr),
  1870. get_order(sev_es_tmr_size),
  1871. true);
  1872. sev_es_tmr = NULL;
  1873. }
  1874. if (sev_init_ex_buffer) {
  1875. __snp_free_firmware_pages(virt_to_page(sev_init_ex_buffer),
  1876. get_order(NV_LENGTH),
  1877. true);
  1878. sev_init_ex_buffer = NULL;
  1879. }
  1880. if (snp_range_list) {
  1881. kfree(snp_range_list);
  1882. snp_range_list = NULL;
  1883. }
  1884. __sev_snp_shutdown_locked(&error, panic);
  1885. }
  1886. static void sev_firmware_shutdown(struct sev_device *sev)
  1887. {
  1888. mutex_lock(&sev_cmd_mutex);
  1889. __sev_firmware_shutdown(sev, false);
  1890. mutex_unlock(&sev_cmd_mutex);
  1891. }
  1892. void sev_dev_destroy(struct psp_device *psp)
  1893. {
  1894. struct sev_device *sev = psp->sev_data;
  1895. if (!sev)
  1896. return;
  1897. sev_firmware_shutdown(sev);
  1898. if (sev->misc)
  1899. kref_put(&misc_dev->refcount, sev_exit);
  1900. psp_clear_sev_irq_handler(psp);
  1901. }
  1902. static int snp_shutdown_on_panic(struct notifier_block *nb,
  1903. unsigned long reason, void *arg)
  1904. {
  1905. struct sev_device *sev = psp_master->sev_data;
  1906. /*
  1907. * If sev_cmd_mutex is already acquired, then it's likely
  1908. * another PSP command is in flight and issuing a shutdown
  1909. * would fail in unexpected ways. Rather than create even
  1910. * more confusion during a panic, just bail out here.
  1911. */
  1912. if (mutex_is_locked(&sev_cmd_mutex))
  1913. return NOTIFY_DONE;
  1914. __sev_firmware_shutdown(sev, true);
  1915. return NOTIFY_DONE;
  1916. }
  1917. static struct notifier_block snp_panic_notifier = {
  1918. .notifier_call = snp_shutdown_on_panic,
  1919. };
  1920. int sev_issue_cmd_external_user(struct file *filep, unsigned int cmd,
  1921. void *data, int *error)
  1922. {
  1923. if (!filep || filep->f_op != &sev_fops)
  1924. return -EBADF;
  1925. return sev_do_cmd(cmd, data, error);
  1926. }
  1927. EXPORT_SYMBOL_GPL(sev_issue_cmd_external_user);
  1928. void sev_pci_init(void)
  1929. {
  1930. struct sev_device *sev = psp_master->sev_data;
  1931. struct sev_platform_init_args args = {0};
  1932. u8 api_major, api_minor, build;
  1933. int rc;
  1934. if (!sev)
  1935. return;
  1936. psp_timeout = psp_probe_timeout;
  1937. if (sev_get_api_version())
  1938. goto err;
  1939. api_major = sev->api_major;
  1940. api_minor = sev->api_minor;
  1941. build = sev->build;
  1942. if (sev_update_firmware(sev->dev) == 0)
  1943. sev_get_api_version();
  1944. if (api_major != sev->api_major || api_minor != sev->api_minor ||
  1945. build != sev->build)
  1946. dev_info(sev->dev, "SEV firmware updated from %d.%d.%d to %d.%d.%d\n",
  1947. api_major, api_minor, build,
  1948. sev->api_major, sev->api_minor, sev->build);
  1949. /* Initialize the platform */
  1950. args.probe = true;
  1951. rc = sev_platform_init(&args);
  1952. if (rc)
  1953. dev_err(sev->dev, "SEV: failed to INIT error %#x, rc %d\n",
  1954. args.error, rc);
  1955. dev_info(sev->dev, "SEV%s API:%d.%d build:%d\n", sev->snp_initialized ?
  1956. "-SNP" : "", sev->api_major, sev->api_minor, sev->build);
  1957. atomic_notifier_chain_register(&panic_notifier_list,
  1958. &snp_panic_notifier);
  1959. return;
  1960. err:
  1961. sev_dev_destroy(psp_master);
  1962. psp_master->sev_data = NULL;
  1963. }
  1964. void sev_pci_exit(void)
  1965. {
  1966. struct sev_device *sev = psp_master->sev_data;
  1967. if (!sev)
  1968. return;
  1969. sev_firmware_shutdown(sev);
  1970. atomic_notifier_chain_unregister(&panic_notifier_list,
  1971. &snp_panic_notifier);
  1972. }