mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
kexec: factor out kexec_load_permitted
Both syscalls (kexec and kexec_file) do the same check, let's factor it out. Link: https://lkml.kernel.org/r/20221114-disable-kexec-reset-v6-2-6a8531a09b9a@chromium.org Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org> Acked-by: Baoquan He <bhe@redhat.com> Cc: Bagas Sanjaya <bagasdotme@gmail.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Guilherme G. Piccoli <gpiccoli@igalia.com> Cc: Joel Fernandes (Google) <joel@joelfernandes.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Philipp Rudo <prudo@redhat.com> Cc: Ross Zwisler <zwisler@kernel.org> Cc: Sergey Senozhatsky <senozhatsky@chromium.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
06dcb0138f
commit
7e99f8b69c
@@ -403,7 +403,8 @@ extern int kimage_crash_copy_vmcoreinfo(struct kimage *image);
|
|||||||
|
|
||||||
extern struct kimage *kexec_image;
|
extern struct kimage *kexec_image;
|
||||||
extern struct kimage *kexec_crash_image;
|
extern struct kimage *kexec_crash_image;
|
||||||
extern int kexec_load_disabled;
|
|
||||||
|
bool kexec_load_permitted(void);
|
||||||
|
|
||||||
#ifndef kexec_flush_icache_page
|
#ifndef kexec_flush_icache_page
|
||||||
#define kexec_flush_icache_page(page)
|
#define kexec_flush_icache_page(page)
|
||||||
|
@@ -193,7 +193,7 @@ static inline int kexec_load_check(unsigned long nr_segments,
|
|||||||
int result;
|
int result;
|
||||||
|
|
||||||
/* We only trust the superuser with rebooting the system. */
|
/* We only trust the superuser with rebooting the system. */
|
||||||
if (!capable(CAP_SYS_BOOT) || kexec_load_disabled)
|
if (!kexec_load_permitted())
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
/* Permit LSMs and IMA to fail the kexec */
|
/* Permit LSMs and IMA to fail the kexec */
|
||||||
|
@@ -922,7 +922,7 @@ int kimage_load_segment(struct kimage *image,
|
|||||||
|
|
||||||
struct kimage *kexec_image;
|
struct kimage *kexec_image;
|
||||||
struct kimage *kexec_crash_image;
|
struct kimage *kexec_crash_image;
|
||||||
int kexec_load_disabled;
|
static int kexec_load_disabled;
|
||||||
#ifdef CONFIG_SYSCTL
|
#ifdef CONFIG_SYSCTL
|
||||||
static struct ctl_table kexec_core_sysctls[] = {
|
static struct ctl_table kexec_core_sysctls[] = {
|
||||||
{
|
{
|
||||||
@@ -946,6 +946,15 @@ static int __init kexec_core_sysctl_init(void)
|
|||||||
late_initcall(kexec_core_sysctl_init);
|
late_initcall(kexec_core_sysctl_init);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool kexec_load_permitted(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Only the superuser can use the kexec syscall and if it has not
|
||||||
|
* been disabled.
|
||||||
|
*/
|
||||||
|
return capable(CAP_SYS_BOOT) && !kexec_load_disabled;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No panic_cpu check version of crash_kexec(). This function is called
|
* No panic_cpu check version of crash_kexec(). This function is called
|
||||||
* only when panic_cpu holds the current CPU number; this is the only CPU
|
* only when panic_cpu holds the current CPU number; this is the only CPU
|
||||||
|
@@ -330,7 +330,7 @@ SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
|
|||||||
struct kimage **dest_image, *image;
|
struct kimage **dest_image, *image;
|
||||||
|
|
||||||
/* We only trust the superuser with rebooting the system. */
|
/* We only trust the superuser with rebooting the system. */
|
||||||
if (!capable(CAP_SYS_BOOT) || kexec_load_disabled)
|
if (!kexec_load_permitted())
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
/* Make sure we have a legal set of flags */
|
/* Make sure we have a legal set of flags */
|
||||||
|
Reference in New Issue
Block a user