162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file contains the routines for initializing kernel userspace protection 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/export.h> 762306a36Sopenharmony_ci#include <linux/init.h> 862306a36Sopenharmony_ci#include <linux/printk.h> 962306a36Sopenharmony_ci#include <linux/smp.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <asm/kup.h> 1262306a36Sopenharmony_ci#include <asm/smp.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifdef CONFIG_PPC_KUAP 1562306a36Sopenharmony_civoid setup_kuap(bool disabled) 1662306a36Sopenharmony_ci{ 1762306a36Sopenharmony_ci if (disabled) { 1862306a36Sopenharmony_ci if (IS_ENABLED(CONFIG_40x)) 1962306a36Sopenharmony_ci disable_kuep = true; 2062306a36Sopenharmony_ci if (smp_processor_id() == boot_cpuid) 2162306a36Sopenharmony_ci cur_cpu_spec->mmu_features &= ~MMU_FTR_KUAP; 2262306a36Sopenharmony_ci return; 2362306a36Sopenharmony_ci } 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci pr_info("Activating Kernel Userspace Access Protection\n"); 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci prevent_user_access(KUAP_READ_WRITE); 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci#endif 30