process.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Based on arch/arm/kernel/process.c
  4. *
  5. * Original Copyright (C) 1995 Linus Torvalds
  6. * Copyright (C) 1996-2000 Russell King - Converted to ARM.
  7. * Copyright (C) 2012 ARM Ltd.
  8. */
  9. #include <linux/compat.h>
  10. #include <linux/efi.h>
  11. #include <linux/elf.h>
  12. #include <linux/export.h>
  13. #include <linux/sched.h>
  14. #include <linux/sched/debug.h>
  15. #include <linux/sched/task.h>
  16. #include <linux/sched/task_stack.h>
  17. #include <linux/kernel.h>
  18. #include <linux/mman.h>
  19. #include <linux/mm.h>
  20. #include <linux/nospec.h>
  21. #include <linux/stddef.h>
  22. #include <linux/sysctl.h>
  23. #include <linux/unistd.h>
  24. #include <linux/user.h>
  25. #include <linux/delay.h>
  26. #include <linux/reboot.h>
  27. #include <linux/interrupt.h>
  28. #include <linux/init.h>
  29. #include <linux/cpu.h>
  30. #include <linux/elfcore.h>
  31. #include <linux/pm.h>
  32. #include <linux/tick.h>
  33. #include <linux/utsname.h>
  34. #include <linux/uaccess.h>
  35. #include <linux/random.h>
  36. #include <linux/hw_breakpoint.h>
  37. #include <linux/personality.h>
  38. #include <linux/notifier.h>
  39. #include <trace/events/power.h>
  40. #include <linux/percpu.h>
  41. #include <linux/thread_info.h>
  42. #include <linux/prctl.h>
  43. #include <linux/stacktrace.h>
  44. #include <asm/alternative.h>
  45. #include <asm/arch_timer.h>
  46. #include <asm/compat.h>
  47. #include <asm/cpufeature.h>
  48. #include <asm/cacheflush.h>
  49. #include <asm/exec.h>
  50. #include <asm/fpsimd.h>
  51. #include <asm/mmu_context.h>
  52. #include <asm/mte.h>
  53. #include <asm/processor.h>
  54. #include <asm/pointer_auth.h>
  55. #include <asm/stacktrace.h>
  56. #include <asm/switch_to.h>
  57. #include <asm/system_misc.h>
  58. #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK)
  59. #include <linux/stackprotector.h>
  60. unsigned long __stack_chk_guard __ro_after_init;
  61. EXPORT_SYMBOL(__stack_chk_guard);
  62. #endif
  63. /*
  64. * Function pointers to optional machine specific functions
  65. */
  66. void (*pm_power_off)(void);
  67. EXPORT_SYMBOL_GPL(pm_power_off);
  68. #ifdef CONFIG_HOTPLUG_CPU
  69. void __noreturn arch_cpu_idle_dead(void)
  70. {
  71. cpu_die();
  72. }
  73. #endif
  74. /*
  75. * Called by kexec, immediately prior to machine_kexec().
  76. *
  77. * This must completely disable all secondary CPUs; simply causing those CPUs
  78. * to execute e.g. a RAM-based pin loop is not sufficient. This allows the
  79. * kexec'd kernel to use any and all RAM as it sees fit, without having to
  80. * avoid any code or data used by any SW CPU pin loop. The CPU hotplug
  81. * functionality embodied in smpt_shutdown_nonboot_cpus() to achieve this.
  82. */
  83. void machine_shutdown(void)
  84. {
  85. smp_shutdown_nonboot_cpus(reboot_cpu);
  86. }
  87. /*
  88. * Halting simply requires that the secondary CPUs stop performing any
  89. * activity (executing tasks, handling interrupts). smp_send_stop()
  90. * achieves this.
  91. */
  92. void machine_halt(void)
  93. {
  94. local_irq_disable();
  95. smp_send_stop();
  96. while (1);
  97. }
  98. /*
  99. * Power-off simply requires that the secondary CPUs stop performing any
  100. * activity (executing tasks, handling interrupts). smp_send_stop()
  101. * achieves this. When the system power is turned off, it will take all CPUs
  102. * with it.
  103. */
  104. void machine_power_off(void)
  105. {
  106. local_irq_disable();
  107. smp_send_stop();
  108. do_kernel_power_off();
  109. }
  110. /*
  111. * Restart requires that the secondary CPUs stop performing any activity
  112. * while the primary CPU resets the system. Systems with multiple CPUs must
  113. * provide a HW restart implementation, to ensure that all CPUs reset at once.
  114. * This is required so that any code running after reset on the primary CPU
  115. * doesn't have to co-ordinate with other CPUs to ensure they aren't still
  116. * executing pre-reset code, and using RAM that the primary CPU's code wishes
  117. * to use. Implementing such co-ordination would be essentially impossible.
  118. */
  119. void machine_restart(char *cmd)
  120. {
  121. /* Disable interrupts first */
  122. local_irq_disable();
  123. smp_send_stop();
  124. /*
  125. * UpdateCapsule() depends on the system being reset via
  126. * ResetSystem().
  127. */
  128. if (efi_enabled(EFI_RUNTIME_SERVICES))
  129. efi_reboot(reboot_mode, NULL);
  130. /* Now call the architecture specific reboot code. */
  131. do_kernel_restart(cmd);
  132. /*
  133. * Whoops - the architecture was unable to reboot.
  134. */
  135. printk("Reboot failed -- System halted\n");
  136. while (1);
  137. }
  138. #define bstr(suffix, str) [PSR_BTYPE_ ## suffix >> PSR_BTYPE_SHIFT] = str
  139. static const char *const btypes[] = {
  140. bstr(NONE, "--"),
  141. bstr( JC, "jc"),
  142. bstr( C, "-c"),
  143. bstr( J , "j-")
  144. };
  145. #undef bstr
  146. static void print_pstate(struct pt_regs *regs)
  147. {
  148. u64 pstate = regs->pstate;
  149. if (compat_user_mode(regs)) {
  150. printk("pstate: %08llx (%c%c%c%c %c %s %s %c%c%c %cDIT %cSSBS)\n",
  151. pstate,
  152. pstate & PSR_AA32_N_BIT ? 'N' : 'n',
  153. pstate & PSR_AA32_Z_BIT ? 'Z' : 'z',
  154. pstate & PSR_AA32_C_BIT ? 'C' : 'c',
  155. pstate & PSR_AA32_V_BIT ? 'V' : 'v',
  156. pstate & PSR_AA32_Q_BIT ? 'Q' : 'q',
  157. pstate & PSR_AA32_T_BIT ? "T32" : "A32",
  158. pstate & PSR_AA32_E_BIT ? "BE" : "LE",
  159. pstate & PSR_AA32_A_BIT ? 'A' : 'a',
  160. pstate & PSR_AA32_I_BIT ? 'I' : 'i',
  161. pstate & PSR_AA32_F_BIT ? 'F' : 'f',
  162. pstate & PSR_AA32_DIT_BIT ? '+' : '-',
  163. pstate & PSR_AA32_SSBS_BIT ? '+' : '-');
  164. } else {
  165. const char *btype_str = btypes[(pstate & PSR_BTYPE_MASK) >>
  166. PSR_BTYPE_SHIFT];
  167. printk("pstate: %08llx (%c%c%c%c %c%c%c%c %cPAN %cUAO %cTCO %cDIT %cSSBS BTYPE=%s)\n",
  168. pstate,
  169. pstate & PSR_N_BIT ? 'N' : 'n',
  170. pstate & PSR_Z_BIT ? 'Z' : 'z',
  171. pstate & PSR_C_BIT ? 'C' : 'c',
  172. pstate & PSR_V_BIT ? 'V' : 'v',
  173. pstate & PSR_D_BIT ? 'D' : 'd',
  174. pstate & PSR_A_BIT ? 'A' : 'a',
  175. pstate & PSR_I_BIT ? 'I' : 'i',
  176. pstate & PSR_F_BIT ? 'F' : 'f',
  177. pstate & PSR_PAN_BIT ? '+' : '-',
  178. pstate & PSR_UAO_BIT ? '+' : '-',
  179. pstate & PSR_TCO_BIT ? '+' : '-',
  180. pstate & PSR_DIT_BIT ? '+' : '-',
  181. pstate & PSR_SSBS_BIT ? '+' : '-',
  182. btype_str);
  183. }
  184. }
  185. void __show_regs(struct pt_regs *regs)
  186. {
  187. int i, top_reg;
  188. u64 lr, sp;
  189. if (compat_user_mode(regs)) {
  190. lr = regs->compat_lr;
  191. sp = regs->compat_sp;
  192. top_reg = 12;
  193. } else {
  194. lr = regs->regs[30];
  195. sp = regs->sp;
  196. top_reg = 29;
  197. }
  198. show_regs_print_info(KERN_DEFAULT);
  199. print_pstate(regs);
  200. if (!user_mode(regs)) {
  201. printk("pc : %pS\n", (void *)regs->pc);
  202. printk("lr : %pS\n", (void *)ptrauth_strip_kernel_insn_pac(lr));
  203. } else {
  204. printk("pc : %016llx\n", regs->pc);
  205. printk("lr : %016llx\n", lr);
  206. }
  207. printk("sp : %016llx\n", sp);
  208. if (system_uses_irq_prio_masking())
  209. printk("pmr_save: %08llx\n", regs->pmr_save);
  210. i = top_reg;
  211. while (i >= 0) {
  212. printk("x%-2d: %016llx", i, regs->regs[i]);
  213. while (i-- % 3)
  214. pr_cont(" x%-2d: %016llx", i, regs->regs[i]);
  215. pr_cont("\n");
  216. }
  217. }
  218. void show_regs(struct pt_regs *regs)
  219. {
  220. __show_regs(regs);
  221. dump_backtrace(regs, NULL, KERN_DEFAULT);
  222. }
  223. static void tls_thread_flush(void)
  224. {
  225. write_sysreg(0, tpidr_el0);
  226. if (system_supports_tpidr2())
  227. write_sysreg_s(0, SYS_TPIDR2_EL0);
  228. if (is_compat_task()) {
  229. current->thread.uw.tp_value = 0;
  230. /*
  231. * We need to ensure ordering between the shadow state and the
  232. * hardware state, so that we don't corrupt the hardware state
  233. * with a stale shadow state during context switch.
  234. */
  235. barrier();
  236. write_sysreg(0, tpidrro_el0);
  237. }
  238. }
  239. static void flush_tagged_addr_state(void)
  240. {
  241. if (IS_ENABLED(CONFIG_ARM64_TAGGED_ADDR_ABI))
  242. clear_thread_flag(TIF_TAGGED_ADDR);
  243. }
  244. static void flush_poe(void)
  245. {
  246. if (!system_supports_poe())
  247. return;
  248. write_sysreg_s(POR_EL0_INIT, SYS_POR_EL0);
  249. }
  250. void flush_thread(void)
  251. {
  252. fpsimd_flush_thread();
  253. tls_thread_flush();
  254. flush_ptrace_hw_breakpoint(current);
  255. flush_tagged_addr_state();
  256. flush_poe();
  257. }
  258. void arch_release_task_struct(struct task_struct *tsk)
  259. {
  260. fpsimd_release_task(tsk);
  261. }
  262. int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
  263. {
  264. if (current->mm)
  265. fpsimd_preserve_current_state();
  266. *dst = *src;
  267. /*
  268. * Detach src's sve_state (if any) from dst so that it does not
  269. * get erroneously used or freed prematurely. dst's copies
  270. * will be allocated on demand later on if dst uses SVE.
  271. * For consistency, also clear TIF_SVE here: this could be done
  272. * later in copy_process(), but to avoid tripping up future
  273. * maintainers it is best not to leave TIF flags and buffers in
  274. * an inconsistent state, even temporarily.
  275. */
  276. dst->thread.sve_state = NULL;
  277. clear_tsk_thread_flag(dst, TIF_SVE);
  278. /*
  279. * In the unlikely event that we create a new thread with ZA
  280. * enabled we should retain the ZA and ZT state so duplicate
  281. * it here. This may be shortly freed if we exec() or if
  282. * CLONE_SETTLS but it's simpler to do it here. To avoid
  283. * confusing the rest of the code ensure that we have a
  284. * sve_state allocated whenever sme_state is allocated.
  285. */
  286. if (thread_za_enabled(&src->thread)) {
  287. dst->thread.sve_state = kzalloc(sve_state_size(src),
  288. GFP_KERNEL);
  289. if (!dst->thread.sve_state)
  290. return -ENOMEM;
  291. dst->thread.sme_state = kmemdup(src->thread.sme_state,
  292. sme_state_size(src),
  293. GFP_KERNEL);
  294. if (!dst->thread.sme_state) {
  295. kfree(dst->thread.sve_state);
  296. dst->thread.sve_state = NULL;
  297. return -ENOMEM;
  298. }
  299. } else {
  300. dst->thread.sme_state = NULL;
  301. clear_tsk_thread_flag(dst, TIF_SME);
  302. }
  303. dst->thread.fp_type = FP_STATE_FPSIMD;
  304. /* clear any pending asynchronous tag fault raised by the parent */
  305. clear_tsk_thread_flag(dst, TIF_MTE_ASYNC_FAULT);
  306. return 0;
  307. }
  308. asmlinkage void ret_from_fork(void) asm("ret_from_fork");
  309. int copy_thread(struct task_struct *p, const struct kernel_clone_args *args)
  310. {
  311. unsigned long clone_flags = args->flags;
  312. unsigned long stack_start = args->stack;
  313. unsigned long tls = args->tls;
  314. struct pt_regs *childregs = task_pt_regs(p);
  315. memset(&p->thread.cpu_context, 0, sizeof(struct cpu_context));
  316. /*
  317. * In case p was allocated the same task_struct pointer as some
  318. * other recently-exited task, make sure p is disassociated from
  319. * any cpu that may have run that now-exited task recently.
  320. * Otherwise we could erroneously skip reloading the FPSIMD
  321. * registers for p.
  322. */
  323. fpsimd_flush_task_state(p);
  324. ptrauth_thread_init_kernel(p);
  325. if (likely(!args->fn)) {
  326. *childregs = *current_pt_regs();
  327. childregs->regs[0] = 0;
  328. /*
  329. * Read the current TLS pointer from tpidr_el0 as it may be
  330. * out-of-sync with the saved value.
  331. */
  332. *task_user_tls(p) = read_sysreg(tpidr_el0);
  333. if (system_supports_tpidr2())
  334. p->thread.tpidr2_el0 = read_sysreg_s(SYS_TPIDR2_EL0);
  335. if (system_supports_poe())
  336. p->thread.por_el0 = read_sysreg_s(SYS_POR_EL0);
  337. if (stack_start) {
  338. if (is_compat_thread(task_thread_info(p)))
  339. childregs->compat_sp = stack_start;
  340. else
  341. childregs->sp = stack_start;
  342. }
  343. /*
  344. * If a TLS pointer was passed to clone, use it for the new
  345. * thread. We also reset TPIDR2 if it's in use.
  346. */
  347. if (clone_flags & CLONE_SETTLS) {
  348. p->thread.uw.tp_value = tls;
  349. p->thread.tpidr2_el0 = 0;
  350. }
  351. } else {
  352. /*
  353. * A kthread has no context to ERET to, so ensure any buggy
  354. * ERET is treated as an illegal exception return.
  355. *
  356. * When a user task is created from a kthread, childregs will
  357. * be initialized by start_thread() or start_compat_thread().
  358. */
  359. memset(childregs, 0, sizeof(struct pt_regs));
  360. childregs->pstate = PSR_MODE_EL1h | PSR_IL_BIT;
  361. p->thread.cpu_context.x19 = (unsigned long)args->fn;
  362. p->thread.cpu_context.x20 = (unsigned long)args->fn_arg;
  363. if (system_supports_poe())
  364. p->thread.por_el0 = POR_EL0_INIT;
  365. }
  366. p->thread.cpu_context.pc = (unsigned long)ret_from_fork;
  367. p->thread.cpu_context.sp = (unsigned long)childregs;
  368. /*
  369. * For the benefit of the unwinder, set up childregs->stackframe
  370. * as the final frame for the new task.
  371. */
  372. p->thread.cpu_context.fp = (unsigned long)childregs->stackframe;
  373. ptrace_hw_copy_thread(p);
  374. return 0;
  375. }
  376. void tls_preserve_current_state(void)
  377. {
  378. *task_user_tls(current) = read_sysreg(tpidr_el0);
  379. if (system_supports_tpidr2() && !is_compat_task())
  380. current->thread.tpidr2_el0 = read_sysreg_s(SYS_TPIDR2_EL0);
  381. }
  382. static void tls_thread_switch(struct task_struct *next)
  383. {
  384. tls_preserve_current_state();
  385. if (is_compat_thread(task_thread_info(next)))
  386. write_sysreg(next->thread.uw.tp_value, tpidrro_el0);
  387. else
  388. write_sysreg(0, tpidrro_el0);
  389. write_sysreg(*task_user_tls(next), tpidr_el0);
  390. if (system_supports_tpidr2())
  391. write_sysreg_s(next->thread.tpidr2_el0, SYS_TPIDR2_EL0);
  392. }
  393. /*
  394. * Force SSBS state on context-switch, since it may be lost after migrating
  395. * from a CPU which treats the bit as RES0 in a heterogeneous system.
  396. */
  397. static void ssbs_thread_switch(struct task_struct *next)
  398. {
  399. /*
  400. * Nothing to do for kernel threads, but 'regs' may be junk
  401. * (e.g. idle task) so check the flags and bail early.
  402. */
  403. if (unlikely(next->flags & PF_KTHREAD))
  404. return;
  405. /*
  406. * If all CPUs implement the SSBS extension, then we just need to
  407. * context-switch the PSTATE field.
  408. */
  409. if (alternative_has_cap_unlikely(ARM64_SSBS))
  410. return;
  411. spectre_v4_enable_task_mitigation(next);
  412. }
  413. /*
  414. * We store our current task in sp_el0, which is clobbered by userspace. Keep a
  415. * shadow copy so that we can restore this upon entry from userspace.
  416. *
  417. * This is *only* for exception entry from EL0, and is not valid until we
  418. * __switch_to() a user task.
  419. */
  420. DEFINE_PER_CPU(struct task_struct *, __entry_task);
  421. static void entry_task_switch(struct task_struct *next)
  422. {
  423. __this_cpu_write(__entry_task, next);
  424. }
  425. /*
  426. * Handle sysreg updates for ARM erratum 1418040 which affects the 32bit view of
  427. * CNTVCT, various other errata which require trapping all CNTVCT{,_EL0}
  428. * accesses and prctl(PR_SET_TSC). Ensure access is disabled iff a workaround is
  429. * required or PR_TSC_SIGSEGV is set.
  430. */
  431. static void update_cntkctl_el1(struct task_struct *next)
  432. {
  433. struct thread_info *ti = task_thread_info(next);
  434. if (test_ti_thread_flag(ti, TIF_TSC_SIGSEGV) ||
  435. has_erratum_handler(read_cntvct_el0) ||
  436. (IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040) &&
  437. this_cpu_has_cap(ARM64_WORKAROUND_1418040) &&
  438. is_compat_thread(ti)))
  439. sysreg_clear_set(cntkctl_el1, ARCH_TIMER_USR_VCT_ACCESS_EN, 0);
  440. else
  441. sysreg_clear_set(cntkctl_el1, 0, ARCH_TIMER_USR_VCT_ACCESS_EN);
  442. }
  443. static void cntkctl_thread_switch(struct task_struct *prev,
  444. struct task_struct *next)
  445. {
  446. if ((read_ti_thread_flags(task_thread_info(prev)) &
  447. (_TIF_32BIT | _TIF_TSC_SIGSEGV)) !=
  448. (read_ti_thread_flags(task_thread_info(next)) &
  449. (_TIF_32BIT | _TIF_TSC_SIGSEGV)))
  450. update_cntkctl_el1(next);
  451. }
  452. static int do_set_tsc_mode(unsigned int val)
  453. {
  454. bool tsc_sigsegv;
  455. if (val == PR_TSC_SIGSEGV)
  456. tsc_sigsegv = true;
  457. else if (val == PR_TSC_ENABLE)
  458. tsc_sigsegv = false;
  459. else
  460. return -EINVAL;
  461. preempt_disable();
  462. update_thread_flag(TIF_TSC_SIGSEGV, tsc_sigsegv);
  463. update_cntkctl_el1(current);
  464. preempt_enable();
  465. return 0;
  466. }
  467. static void permission_overlay_switch(struct task_struct *next)
  468. {
  469. if (!system_supports_poe())
  470. return;
  471. current->thread.por_el0 = read_sysreg_s(SYS_POR_EL0);
  472. if (current->thread.por_el0 != next->thread.por_el0) {
  473. write_sysreg_s(next->thread.por_el0, SYS_POR_EL0);
  474. /*
  475. * No ISB required as we can tolerate spurious Overlay faults -
  476. * the fault handler will check again based on the new value
  477. * of POR_EL0.
  478. */
  479. }
  480. }
  481. /*
  482. * __switch_to() checks current->thread.sctlr_user as an optimisation. Therefore
  483. * this function must be called with preemption disabled and the update to
  484. * sctlr_user must be made in the same preemption disabled block so that
  485. * __switch_to() does not see the variable update before the SCTLR_EL1 one.
  486. */
  487. void update_sctlr_el1(u64 sctlr)
  488. {
  489. /*
  490. * EnIA must not be cleared while in the kernel as this is necessary for
  491. * in-kernel PAC. It will be cleared on kernel exit if needed.
  492. */
  493. sysreg_clear_set(sctlr_el1, SCTLR_USER_MASK & ~SCTLR_ELx_ENIA, sctlr);
  494. /* ISB required for the kernel uaccess routines when setting TCF0. */
  495. isb();
  496. }
  497. /*
  498. * Thread switching.
  499. */
  500. __notrace_funcgraph __sched
  501. struct task_struct *__switch_to(struct task_struct *prev,
  502. struct task_struct *next)
  503. {
  504. struct task_struct *last;
  505. fpsimd_thread_switch(next);
  506. tls_thread_switch(next);
  507. hw_breakpoint_thread_switch(next);
  508. contextidr_thread_switch(next);
  509. entry_task_switch(next);
  510. ssbs_thread_switch(next);
  511. cntkctl_thread_switch(prev, next);
  512. ptrauth_thread_switch_user(next);
  513. permission_overlay_switch(next);
  514. /*
  515. * Complete any pending TLB or cache maintenance on this CPU in case
  516. * the thread migrates to a different CPU.
  517. * This full barrier is also required by the membarrier system
  518. * call.
  519. */
  520. dsb(ish);
  521. /*
  522. * MTE thread switching must happen after the DSB above to ensure that
  523. * any asynchronous tag check faults have been logged in the TFSR*_EL1
  524. * registers.
  525. */
  526. mte_thread_switch(next);
  527. /* avoid expensive SCTLR_EL1 accesses if no change */
  528. if (prev->thread.sctlr_user != next->thread.sctlr_user)
  529. update_sctlr_el1(next->thread.sctlr_user);
  530. /* the actual thread switch */
  531. last = cpu_switch_to(prev, next);
  532. return last;
  533. }
  534. struct wchan_info {
  535. unsigned long pc;
  536. int count;
  537. };
  538. static bool get_wchan_cb(void *arg, unsigned long pc)
  539. {
  540. struct wchan_info *wchan_info = arg;
  541. if (!in_sched_functions(pc)) {
  542. wchan_info->pc = pc;
  543. return false;
  544. }
  545. return wchan_info->count++ < 16;
  546. }
  547. unsigned long __get_wchan(struct task_struct *p)
  548. {
  549. struct wchan_info wchan_info = {
  550. .pc = 0,
  551. .count = 0,
  552. };
  553. if (!try_get_task_stack(p))
  554. return 0;
  555. arch_stack_walk(get_wchan_cb, &wchan_info, p, NULL);
  556. put_task_stack(p);
  557. return wchan_info.pc;
  558. }
  559. unsigned long arch_align_stack(unsigned long sp)
  560. {
  561. if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
  562. sp -= get_random_u32_below(PAGE_SIZE);
  563. return sp & ~0xf;
  564. }
  565. #ifdef CONFIG_COMPAT
  566. int compat_elf_check_arch(const struct elf32_hdr *hdr)
  567. {
  568. if (!system_supports_32bit_el0())
  569. return false;
  570. if ((hdr)->e_machine != EM_ARM)
  571. return false;
  572. if (!((hdr)->e_flags & EF_ARM_EABI_MASK))
  573. return false;
  574. /*
  575. * Prevent execve() of a 32-bit program from a deadline task
  576. * if the restricted affinity mask would be inadmissible on an
  577. * asymmetric system.
  578. */
  579. return !static_branch_unlikely(&arm64_mismatched_32bit_el0) ||
  580. !dl_task_check_affinity(current, system_32bit_el0_cpumask());
  581. }
  582. #endif
  583. /*
  584. * Called from setup_new_exec() after (COMPAT_)SET_PERSONALITY.
  585. */
  586. void arch_setup_new_exec(void)
  587. {
  588. unsigned long mmflags = 0;
  589. if (is_compat_task()) {
  590. mmflags = MMCF_AARCH32;
  591. /*
  592. * Restrict the CPU affinity mask for a 32-bit task so that
  593. * it contains only 32-bit-capable CPUs.
  594. *
  595. * From the perspective of the task, this looks similar to
  596. * what would happen if the 64-bit-only CPUs were hot-unplugged
  597. * at the point of execve(), although we try a bit harder to
  598. * honour the cpuset hierarchy.
  599. */
  600. if (static_branch_unlikely(&arm64_mismatched_32bit_el0))
  601. force_compatible_cpus_allowed_ptr(current);
  602. } else if (static_branch_unlikely(&arm64_mismatched_32bit_el0)) {
  603. relax_compatible_cpus_allowed_ptr(current);
  604. }
  605. current->mm->context.flags = mmflags;
  606. ptrauth_thread_init_user();
  607. mte_thread_init_user();
  608. do_set_tsc_mode(PR_TSC_ENABLE);
  609. if (task_spec_ssb_noexec(current)) {
  610. arch_prctl_spec_ctrl_set(current, PR_SPEC_STORE_BYPASS,
  611. PR_SPEC_ENABLE);
  612. }
  613. }
  614. #ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
  615. /*
  616. * Control the relaxed ABI allowing tagged user addresses into the kernel.
  617. */
  618. static unsigned int tagged_addr_disabled;
  619. long set_tagged_addr_ctrl(struct task_struct *task, unsigned long arg)
  620. {
  621. unsigned long valid_mask = PR_TAGGED_ADDR_ENABLE;
  622. struct thread_info *ti = task_thread_info(task);
  623. if (is_compat_thread(ti))
  624. return -EINVAL;
  625. if (system_supports_mte())
  626. valid_mask |= PR_MTE_TCF_SYNC | PR_MTE_TCF_ASYNC \
  627. | PR_MTE_TAG_MASK;
  628. if (arg & ~valid_mask)
  629. return -EINVAL;
  630. /*
  631. * Do not allow the enabling of the tagged address ABI if globally
  632. * disabled via sysctl abi.tagged_addr_disabled.
  633. */
  634. if (arg & PR_TAGGED_ADDR_ENABLE && tagged_addr_disabled)
  635. return -EINVAL;
  636. if (set_mte_ctrl(task, arg) != 0)
  637. return -EINVAL;
  638. update_ti_thread_flag(ti, TIF_TAGGED_ADDR, arg & PR_TAGGED_ADDR_ENABLE);
  639. return 0;
  640. }
  641. long get_tagged_addr_ctrl(struct task_struct *task)
  642. {
  643. long ret = 0;
  644. struct thread_info *ti = task_thread_info(task);
  645. if (is_compat_thread(ti))
  646. return -EINVAL;
  647. if (test_ti_thread_flag(ti, TIF_TAGGED_ADDR))
  648. ret = PR_TAGGED_ADDR_ENABLE;
  649. ret |= get_mte_ctrl(task);
  650. return ret;
  651. }
  652. /*
  653. * Global sysctl to disable the tagged user addresses support. This control
  654. * only prevents the tagged address ABI enabling via prctl() and does not
  655. * disable it for tasks that already opted in to the relaxed ABI.
  656. */
  657. static struct ctl_table tagged_addr_sysctl_table[] = {
  658. {
  659. .procname = "tagged_addr_disabled",
  660. .mode = 0644,
  661. .data = &tagged_addr_disabled,
  662. .maxlen = sizeof(int),
  663. .proc_handler = proc_dointvec_minmax,
  664. .extra1 = SYSCTL_ZERO,
  665. .extra2 = SYSCTL_ONE,
  666. },
  667. };
  668. static int __init tagged_addr_init(void)
  669. {
  670. if (!register_sysctl("abi", tagged_addr_sysctl_table))
  671. return -EINVAL;
  672. return 0;
  673. }
  674. core_initcall(tagged_addr_init);
  675. #endif /* CONFIG_ARM64_TAGGED_ADDR_ABI */
  676. #ifdef CONFIG_BINFMT_ELF
  677. int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state,
  678. bool has_interp, bool is_interp)
  679. {
  680. /*
  681. * For dynamically linked executables the interpreter is
  682. * responsible for setting PROT_BTI on everything except
  683. * itself.
  684. */
  685. if (is_interp != has_interp)
  686. return prot;
  687. if (!(state->flags & ARM64_ELF_BTI))
  688. return prot;
  689. if (prot & PROT_EXEC)
  690. prot |= PROT_BTI;
  691. return prot;
  692. }
  693. #endif
  694. int get_tsc_mode(unsigned long adr)
  695. {
  696. unsigned int val;
  697. if (is_compat_task())
  698. return -EINVAL;
  699. if (test_thread_flag(TIF_TSC_SIGSEGV))
  700. val = PR_TSC_SIGSEGV;
  701. else
  702. val = PR_TSC_ENABLE;
  703. return put_user(val, (unsigned int __user *)adr);
  704. }
  705. int set_tsc_mode(unsigned int val)
  706. {
  707. if (is_compat_task())
  708. return -EINVAL;
  709. return do_set_tsc_mode(val);
  710. }