Skip to content

Commit

Permalink
reboot: hide from sysfs not applicable settings
Browse files Browse the repository at this point in the history
Not all the reboot settings from both the kernel command line or sysfs
interface are available to all platforms.

Filter out reboot_type and reboot_force which are x86 only, and also
remove reboot_cpu on kernels without SMP support.

This saves some space, and avoid confusing the user with settings which
will have no effect.

Link: https://lkml.kernel.org/r/20201130173717.198952-3-mcroce@linux.microsoft.com
Signed-off-by: Matteo Croce <mcroce@microsoft.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
teknoraver authored and torvalds committed Dec 16, 2020
1 parent 1a9d079 commit 40247e5
Showing 1 changed file with 31 additions and 23 deletions.
54 changes: 31 additions & 23 deletions kernel/reboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,29 @@ static ssize_t mode_store(struct kobject *kobj, struct kobj_attribute *attr,
}
static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode);

#ifdef CONFIG_X86
static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%d\n", reboot_force);
}
static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t count)
{
bool res;

if (!capable(CAP_SYS_BOOT))
return -EPERM;

if (kstrtobool(buf, &res))
return -EINVAL;

reboot_default = 0;
reboot_force = res;

return count;
}
static struct kobj_attribute reboot_force_attr = __ATTR_RW(force);

static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{
const char *val;
Expand Down Expand Up @@ -723,7 +746,9 @@ static ssize_t type_store(struct kobject *kobj, struct kobj_attribute *attr,
return count;
}
static struct kobj_attribute reboot_type_attr = __ATTR_RW(type);
#endif

#ifdef CONFIG_SMP
static ssize_t cpu_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%d\n", reboot_cpu);
Expand Down Expand Up @@ -751,34 +776,17 @@ static ssize_t cpu_store(struct kobject *kobj, struct kobj_attribute *attr,
return count;
}
static struct kobj_attribute reboot_cpu_attr = __ATTR_RW(cpu);

static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%d\n", reboot_force);
}
static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t count)
{
bool res;

if (!capable(CAP_SYS_BOOT))
return -EPERM;

if (kstrtobool(buf, &res))
return -EINVAL;

reboot_default = 0;
reboot_force = res;

return count;
}
static struct kobj_attribute reboot_force_attr = __ATTR_RW(force);
#endif

static struct attribute *reboot_attrs[] = {
&reboot_mode_attr.attr,
#ifdef CONFIG_X86
&reboot_force_attr.attr,
&reboot_type_attr.attr,
#endif
#ifdef CONFIG_SMP
&reboot_cpu_attr.attr,
&reboot_force_attr.attr,
#endif
NULL,
};

Expand Down

0 comments on commit 40247e5

Please sign in to comment.