shstk.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * shstk.c - Intel shadow stack support
  4. *
  5. * Copyright (c) 2021, Intel Corporation.
  6. * Yu-cheng Yu <yu-cheng.yu@intel.com>
  7. */
  8. #include <linux/sched.h>
  9. #include <linux/bitops.h>
  10. #include <linux/types.h>
  11. #include <linux/mm.h>
  12. #include <linux/mman.h>
  13. #include <linux/slab.h>
  14. #include <linux/uaccess.h>
  15. #include <linux/sched/signal.h>
  16. #include <linux/compat.h>
  17. #include <linux/sizes.h>
  18. #include <linux/user.h>
  19. #include <linux/syscalls.h>
  20. #include <asm/msr.h>
  21. #include <asm/fpu/xstate.h>
  22. #include <asm/fpu/types.h>
  23. #include <asm/shstk.h>
  24. #include <asm/special_insns.h>
  25. #include <asm/fpu/api.h>
  26. #include <asm/prctl.h>
  27. #define SS_FRAME_SIZE 8
  28. static bool features_enabled(unsigned long features)
  29. {
  30. return current->thread.features & features;
  31. }
  32. static void features_set(unsigned long features)
  33. {
  34. current->thread.features |= features;
  35. }
  36. static void features_clr(unsigned long features)
  37. {
  38. current->thread.features &= ~features;
  39. }
  40. /*
  41. * Create a restore token on the shadow stack. A token is always 8-byte
  42. * and aligned to 8.
  43. */
  44. static int create_rstor_token(unsigned long ssp, unsigned long *token_addr)
  45. {
  46. unsigned long addr;
  47. /* Token must be aligned */
  48. if (!IS_ALIGNED(ssp, 8))
  49. return -EINVAL;
  50. addr = ssp - SS_FRAME_SIZE;
  51. /*
  52. * SSP is aligned, so reserved bits and mode bit are a zero, just mark
  53. * the token 64-bit.
  54. */
  55. ssp |= BIT(0);
  56. if (write_user_shstk_64((u64 __user *)addr, (u64)ssp))
  57. return -EFAULT;
  58. if (token_addr)
  59. *token_addr = addr;
  60. return 0;
  61. }
  62. /*
  63. * VM_SHADOW_STACK will have a guard page. This helps userspace protect
  64. * itself from attacks. The reasoning is as follows:
  65. *
  66. * The shadow stack pointer(SSP) is moved by CALL, RET, and INCSSPQ. The
  67. * INCSSP instruction can increment the shadow stack pointer. It is the
  68. * shadow stack analog of an instruction like:
  69. *
  70. * addq $0x80, %rsp
  71. *
  72. * However, there is one important difference between an ADD on %rsp
  73. * and INCSSP. In addition to modifying SSP, INCSSP also reads from the
  74. * memory of the first and last elements that were "popped". It can be
  75. * thought of as acting like this:
  76. *
  77. * READ_ONCE(ssp); // read+discard top element on stack
  78. * ssp += nr_to_pop * 8; // move the shadow stack
  79. * READ_ONCE(ssp-8); // read+discard last popped stack element
  80. *
  81. * The maximum distance INCSSP can move the SSP is 2040 bytes, before
  82. * it would read the memory. Therefore a single page gap will be enough
  83. * to prevent any operation from shifting the SSP to an adjacent stack,
  84. * since it would have to land in the gap at least once, causing a
  85. * fault.
  86. */
  87. static unsigned long alloc_shstk(unsigned long addr, unsigned long size,
  88. unsigned long token_offset, bool set_res_tok)
  89. {
  90. int flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_ABOVE4G;
  91. struct mm_struct *mm = current->mm;
  92. unsigned long mapped_addr, unused;
  93. if (addr)
  94. flags |= MAP_FIXED_NOREPLACE;
  95. mmap_write_lock(mm);
  96. mapped_addr = do_mmap(NULL, addr, size, PROT_READ, flags,
  97. VM_SHADOW_STACK | VM_WRITE, 0, &unused, NULL);
  98. mmap_write_unlock(mm);
  99. if (!set_res_tok || IS_ERR_VALUE(mapped_addr))
  100. goto out;
  101. if (create_rstor_token(mapped_addr + token_offset, NULL)) {
  102. vm_munmap(mapped_addr, size);
  103. return -EINVAL;
  104. }
  105. out:
  106. return mapped_addr;
  107. }
  108. static unsigned long adjust_shstk_size(unsigned long size)
  109. {
  110. if (size)
  111. return PAGE_ALIGN(size);
  112. return PAGE_ALIGN(min_t(unsigned long long, rlimit(RLIMIT_STACK), SZ_4G));
  113. }
  114. static void unmap_shadow_stack(u64 base, u64 size)
  115. {
  116. int r;
  117. r = vm_munmap(base, size);
  118. /*
  119. * mmap_write_lock_killable() failed with -EINTR. This means
  120. * the process is about to die and have it's MM cleaned up.
  121. * This task shouldn't ever make it back to userspace. In this
  122. * case it is ok to leak a shadow stack, so just exit out.
  123. */
  124. if (r == -EINTR)
  125. return;
  126. /*
  127. * For all other types of vm_munmap() failure, either the
  128. * system is out of memory or there is bug.
  129. */
  130. WARN_ON_ONCE(r);
  131. }
  132. static int shstk_setup(void)
  133. {
  134. struct thread_shstk *shstk = &current->thread.shstk;
  135. unsigned long addr, size;
  136. /* Already enabled */
  137. if (features_enabled(ARCH_SHSTK_SHSTK))
  138. return 0;
  139. /* Also not supported for 32 bit */
  140. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK) || in_ia32_syscall())
  141. return -EOPNOTSUPP;
  142. size = adjust_shstk_size(0);
  143. addr = alloc_shstk(0, size, 0, false);
  144. if (IS_ERR_VALUE(addr))
  145. return PTR_ERR((void *)addr);
  146. fpregs_lock_and_load();
  147. wrmsrl(MSR_IA32_PL3_SSP, addr + size);
  148. wrmsrl(MSR_IA32_U_CET, CET_SHSTK_EN);
  149. fpregs_unlock();
  150. shstk->base = addr;
  151. shstk->size = size;
  152. features_set(ARCH_SHSTK_SHSTK);
  153. return 0;
  154. }
  155. void reset_thread_features(void)
  156. {
  157. memset(&current->thread.shstk, 0, sizeof(struct thread_shstk));
  158. current->thread.features = 0;
  159. current->thread.features_locked = 0;
  160. }
  161. unsigned long shstk_alloc_thread_stack(struct task_struct *tsk, unsigned long clone_flags,
  162. unsigned long stack_size)
  163. {
  164. struct thread_shstk *shstk = &tsk->thread.shstk;
  165. unsigned long addr, size;
  166. /*
  167. * If shadow stack is not enabled on the new thread, skip any
  168. * switch to a new shadow stack.
  169. */
  170. if (!features_enabled(ARCH_SHSTK_SHSTK))
  171. return 0;
  172. /*
  173. * For CLONE_VFORK the child will share the parents shadow stack.
  174. * Make sure to clear the internal tracking of the thread shadow
  175. * stack so the freeing logic run for child knows to leave it alone.
  176. */
  177. if (clone_flags & CLONE_VFORK) {
  178. shstk->base = 0;
  179. shstk->size = 0;
  180. return 0;
  181. }
  182. /*
  183. * For !CLONE_VM the child will use a copy of the parents shadow
  184. * stack.
  185. */
  186. if (!(clone_flags & CLONE_VM))
  187. return 0;
  188. size = adjust_shstk_size(stack_size);
  189. addr = alloc_shstk(0, size, 0, false);
  190. if (IS_ERR_VALUE(addr))
  191. return addr;
  192. shstk->base = addr;
  193. shstk->size = size;
  194. return addr + size;
  195. }
  196. static unsigned long get_user_shstk_addr(void)
  197. {
  198. unsigned long long ssp;
  199. fpregs_lock_and_load();
  200. rdmsrl(MSR_IA32_PL3_SSP, ssp);
  201. fpregs_unlock();
  202. return ssp;
  203. }
  204. #define SHSTK_DATA_BIT BIT(63)
  205. static int put_shstk_data(u64 __user *addr, u64 data)
  206. {
  207. if (WARN_ON_ONCE(data & SHSTK_DATA_BIT))
  208. return -EINVAL;
  209. /*
  210. * Mark the high bit so that the sigframe can't be processed as a
  211. * return address.
  212. */
  213. if (write_user_shstk_64(addr, data | SHSTK_DATA_BIT))
  214. return -EFAULT;
  215. return 0;
  216. }
  217. static int get_shstk_data(unsigned long *data, unsigned long __user *addr)
  218. {
  219. unsigned long ldata;
  220. if (unlikely(get_user(ldata, addr)))
  221. return -EFAULT;
  222. if (!(ldata & SHSTK_DATA_BIT))
  223. return -EINVAL;
  224. *data = ldata & ~SHSTK_DATA_BIT;
  225. return 0;
  226. }
  227. static int shstk_push_sigframe(unsigned long *ssp)
  228. {
  229. unsigned long target_ssp = *ssp;
  230. /* Token must be aligned */
  231. if (!IS_ALIGNED(target_ssp, 8))
  232. return -EINVAL;
  233. *ssp -= SS_FRAME_SIZE;
  234. if (put_shstk_data((void __user *)*ssp, target_ssp))
  235. return -EFAULT;
  236. return 0;
  237. }
  238. static int shstk_pop_sigframe(unsigned long *ssp)
  239. {
  240. struct vm_area_struct *vma;
  241. unsigned long token_addr;
  242. bool need_to_check_vma;
  243. int err = 1;
  244. /*
  245. * It is possible for the SSP to be off the end of a shadow stack by 4
  246. * or 8 bytes. If the shadow stack is at the start of a page or 4 bytes
  247. * before it, it might be this case, so check that the address being
  248. * read is actually shadow stack.
  249. */
  250. if (!IS_ALIGNED(*ssp, 8))
  251. return -EINVAL;
  252. need_to_check_vma = PAGE_ALIGN(*ssp) == *ssp;
  253. if (need_to_check_vma)
  254. mmap_read_lock_killable(current->mm);
  255. err = get_shstk_data(&token_addr, (unsigned long __user *)*ssp);
  256. if (unlikely(err))
  257. goto out_err;
  258. if (need_to_check_vma) {
  259. vma = find_vma(current->mm, *ssp);
  260. if (!vma || !(vma->vm_flags & VM_SHADOW_STACK)) {
  261. err = -EFAULT;
  262. goto out_err;
  263. }
  264. mmap_read_unlock(current->mm);
  265. }
  266. /* Restore SSP aligned? */
  267. if (unlikely(!IS_ALIGNED(token_addr, 8)))
  268. return -EINVAL;
  269. /* SSP in userspace? */
  270. if (unlikely(token_addr >= TASK_SIZE_MAX))
  271. return -EINVAL;
  272. *ssp = token_addr;
  273. return 0;
  274. out_err:
  275. if (need_to_check_vma)
  276. mmap_read_unlock(current->mm);
  277. return err;
  278. }
  279. int setup_signal_shadow_stack(struct ksignal *ksig)
  280. {
  281. void __user *restorer = ksig->ka.sa.sa_restorer;
  282. unsigned long ssp;
  283. int err;
  284. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK) ||
  285. !features_enabled(ARCH_SHSTK_SHSTK))
  286. return 0;
  287. if (!restorer)
  288. return -EINVAL;
  289. ssp = get_user_shstk_addr();
  290. if (unlikely(!ssp))
  291. return -EINVAL;
  292. err = shstk_push_sigframe(&ssp);
  293. if (unlikely(err))
  294. return err;
  295. /* Push restorer address */
  296. ssp -= SS_FRAME_SIZE;
  297. err = write_user_shstk_64((u64 __user *)ssp, (u64)restorer);
  298. if (unlikely(err))
  299. return -EFAULT;
  300. fpregs_lock_and_load();
  301. wrmsrl(MSR_IA32_PL3_SSP, ssp);
  302. fpregs_unlock();
  303. return 0;
  304. }
  305. int restore_signal_shadow_stack(void)
  306. {
  307. unsigned long ssp;
  308. int err;
  309. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK) ||
  310. !features_enabled(ARCH_SHSTK_SHSTK))
  311. return 0;
  312. ssp = get_user_shstk_addr();
  313. if (unlikely(!ssp))
  314. return -EINVAL;
  315. err = shstk_pop_sigframe(&ssp);
  316. if (unlikely(err))
  317. return err;
  318. fpregs_lock_and_load();
  319. wrmsrl(MSR_IA32_PL3_SSP, ssp);
  320. fpregs_unlock();
  321. return 0;
  322. }
  323. void shstk_free(struct task_struct *tsk)
  324. {
  325. struct thread_shstk *shstk = &tsk->thread.shstk;
  326. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK) ||
  327. !features_enabled(ARCH_SHSTK_SHSTK))
  328. return;
  329. /*
  330. * When fork() with CLONE_VM fails, the child (tsk) already has a
  331. * shadow stack allocated, and exit_thread() calls this function to
  332. * free it. In this case the parent (current) and the child share
  333. * the same mm struct.
  334. */
  335. if (!tsk->mm || tsk->mm != current->mm)
  336. return;
  337. /*
  338. * If shstk->base is NULL, then this task is not managing its
  339. * own shadow stack (CLONE_VFORK). So skip freeing it.
  340. */
  341. if (!shstk->base)
  342. return;
  343. /*
  344. * shstk->base is NULL for CLONE_VFORK child tasks, and so is
  345. * normal. But size = 0 on a shstk->base is not normal and
  346. * indicated an attempt to free the thread shadow stack twice.
  347. * Warn about it.
  348. */
  349. if (WARN_ON(!shstk->size))
  350. return;
  351. unmap_shadow_stack(shstk->base, shstk->size);
  352. shstk->size = 0;
  353. }
  354. static int wrss_control(bool enable)
  355. {
  356. u64 msrval;
  357. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK))
  358. return -EOPNOTSUPP;
  359. /*
  360. * Only enable WRSS if shadow stack is enabled. If shadow stack is not
  361. * enabled, WRSS will already be disabled, so don't bother clearing it
  362. * when disabling.
  363. */
  364. if (!features_enabled(ARCH_SHSTK_SHSTK))
  365. return -EPERM;
  366. /* Already enabled/disabled? */
  367. if (features_enabled(ARCH_SHSTK_WRSS) == enable)
  368. return 0;
  369. fpregs_lock_and_load();
  370. rdmsrl(MSR_IA32_U_CET, msrval);
  371. if (enable) {
  372. features_set(ARCH_SHSTK_WRSS);
  373. msrval |= CET_WRSS_EN;
  374. } else {
  375. features_clr(ARCH_SHSTK_WRSS);
  376. if (!(msrval & CET_WRSS_EN))
  377. goto unlock;
  378. msrval &= ~CET_WRSS_EN;
  379. }
  380. wrmsrl(MSR_IA32_U_CET, msrval);
  381. unlock:
  382. fpregs_unlock();
  383. return 0;
  384. }
  385. static int shstk_disable(void)
  386. {
  387. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK))
  388. return -EOPNOTSUPP;
  389. /* Already disabled? */
  390. if (!features_enabled(ARCH_SHSTK_SHSTK))
  391. return 0;
  392. fpregs_lock_and_load();
  393. /* Disable WRSS too when disabling shadow stack */
  394. wrmsrl(MSR_IA32_U_CET, 0);
  395. wrmsrl(MSR_IA32_PL3_SSP, 0);
  396. fpregs_unlock();
  397. shstk_free(current);
  398. features_clr(ARCH_SHSTK_SHSTK | ARCH_SHSTK_WRSS);
  399. return 0;
  400. }
  401. SYSCALL_DEFINE3(map_shadow_stack, unsigned long, addr, unsigned long, size, unsigned int, flags)
  402. {
  403. bool set_tok = flags & SHADOW_STACK_SET_TOKEN;
  404. unsigned long aligned_size;
  405. if (!cpu_feature_enabled(X86_FEATURE_USER_SHSTK))
  406. return -EOPNOTSUPP;
  407. if (flags & ~SHADOW_STACK_SET_TOKEN)
  408. return -EINVAL;
  409. /* If there isn't space for a token */
  410. if (set_tok && size < 8)
  411. return -ENOSPC;
  412. if (addr && addr < SZ_4G)
  413. return -ERANGE;
  414. /*
  415. * An overflow would result in attempting to write the restore token
  416. * to the wrong location. Not catastrophic, but just return the right
  417. * error code and block it.
  418. */
  419. aligned_size = PAGE_ALIGN(size);
  420. if (aligned_size < size)
  421. return -EOVERFLOW;
  422. return alloc_shstk(addr, aligned_size, size, set_tok);
  423. }
  424. long shstk_prctl(struct task_struct *task, int option, unsigned long arg2)
  425. {
  426. unsigned long features = arg2;
  427. if (option == ARCH_SHSTK_STATUS) {
  428. return put_user(task->thread.features, (unsigned long __user *)arg2);
  429. }
  430. if (option == ARCH_SHSTK_LOCK) {
  431. task->thread.features_locked |= features;
  432. return 0;
  433. }
  434. /* Only allow via ptrace */
  435. if (task != current) {
  436. if (option == ARCH_SHSTK_UNLOCK && IS_ENABLED(CONFIG_CHECKPOINT_RESTORE)) {
  437. task->thread.features_locked &= ~features;
  438. return 0;
  439. }
  440. return -EINVAL;
  441. }
  442. /* Do not allow to change locked features */
  443. if (features & task->thread.features_locked)
  444. return -EPERM;
  445. /* Only support enabling/disabling one feature at a time. */
  446. if (hweight_long(features) > 1)
  447. return -EINVAL;
  448. if (option == ARCH_SHSTK_DISABLE) {
  449. if (features & ARCH_SHSTK_WRSS)
  450. return wrss_control(false);
  451. if (features & ARCH_SHSTK_SHSTK)
  452. return shstk_disable();
  453. return -EINVAL;
  454. }
  455. /* Handle ARCH_SHSTK_ENABLE */
  456. if (features & ARCH_SHSTK_SHSTK)
  457. return shstk_setup();
  458. if (features & ARCH_SHSTK_WRSS)
  459. return wrss_control(true);
  460. return -EINVAL;
  461. }
  462. int shstk_update_last_frame(unsigned long val)
  463. {
  464. unsigned long ssp;
  465. if (!features_enabled(ARCH_SHSTK_SHSTK))
  466. return 0;
  467. ssp = get_user_shstk_addr();
  468. return write_user_shstk_64((u64 __user *)ssp, (u64)val);
  469. }
  470. bool shstk_is_enabled(void)
  471. {
  472. return features_enabled(ARCH_SHSTK_SHSTK);
  473. }