summaryrefslogtreecommitdiff
path: root/arch/powerpc/mm/book3s32/kuap.c
blob: 28676cabb005deccbf3bb3ee341048bbdc8b4000 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// SPDX-License-Identifier: GPL-2.0-or-later

#include <asm/kup.h>
#include <asm/smp.h>

struct static_key_false disable_kuap_key;
EXPORT_SYMBOL(disable_kuap_key);

void kuap_lock_all_ool(void)
{
	kuap_lock_all();
}
EXPORT_SYMBOL(kuap_lock_all_ool);

void kuap_unlock_all_ool(void)
{
	kuap_unlock_all();
}
EXPORT_SYMBOL(kuap_unlock_all_ool);

void setup_kuap(bool disabled)
{
	if (!disabled) {
		kuap_lock_all_ool();
		init_mm.context.sr0 |= SR_KS;
		current->thread.sr0 |= SR_KS;
	}

	if (smp_processor_id() != boot_cpuid)
		return;

	if (disabled)
		static_branch_enable(&disable_kuap_key);
	else
		pr_info("Activating Kernel Userspace Access Protection\n");
}