]> git.zerfleddert.de Git - ms2-kexec/blame - sys.c
don't be so verbose
[ms2-kexec] / sys.c
CommitLineData
4e93cb00
MG
1/*
2 * linux/kernel/sys.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7#include <linux/module.h>
8#include <linux/mm.h>
9#include <linux/utsname.h>
10#include <linux/mman.h>
11#include <linux/smp_lock.h>
12#include <linux/notifier.h>
13#include <linux/reboot.h>
14#include <linux/prctl.h>
15#include <linux/highuid.h>
16#include <linux/fs.h>
17#include <linux/resource.h>
18#include <linux/kernel.h>
19#include <linux/kexec.h>
20#include <linux/workqueue.h>
21#include <linux/capability.h>
22#include <linux/device.h>
23#include <linux/key.h>
24#include <linux/times.h>
25#include <linux/posix-timers.h>
26#include <linux/security.h>
27#include <linux/dcookies.h>
28#include <linux/suspend.h>
29#include <linux/tty.h>
30#include <linux/signal.h>
31#include <linux/cn_proc.h>
32#include <linux/getcpu.h>
33#include <linux/task_io_accounting_ops.h>
34#include <linux/seccomp.h>
35#include <linux/cpu.h>
36#include <linux/ptrace.h>
37
38#include <linux/compat.h>
39#include <linux/syscalls.h>
40#include <linux/kprobes.h>
41#include <linux/user_namespace.h>
42
43#include <asm/uaccess.h>
44#include <asm/io.h>
45#include <asm/unistd.h>
46
47extern asmlinkage long (*original_reboot)(int magic1, int magic2, unsigned int cmd, void __user *arg);
48
49static struct notifier_block dummy_notifier_reboot = {
50 .notifier_call = NULL,
51 .next = NULL,
52 .priority = INT_MAX
53};
54
55BLOCKING_NOTIFIER_HEAD(notifier_head);
56
57
58void kernel_restart_prepare(char *cmd)
59{
60 register_reboot_notifier(&dummy_notifier_reboot);
61 notifier_head.head=dummy_notifier_reboot.next;
62 unregister_reboot_notifier(&dummy_notifier_reboot);
63
64 blocking_notifier_call_chain(&notifier_head, SYS_RESTART, cmd);
65 system_state = SYSTEM_RESTART;
66// device_shutdown();
67// sysdev_shutdown();
68}
69
70/*
71 * Reboot system call: for obvious reasons only root may call it,
72 * and even root needs to set up some magic numbers in the registers
73 * so that some mistake won't make this reboot the whole machine.
74 * You can also set the meaning of the ctrl-alt-del-key here.
75 *
76 * reboot doesn't sync: do that yourself before calling this.
77 */
78asmlinkage long reboot(int magic1, int magic2, unsigned int cmd, void __user *arg)
79{
80 int ret;
81 if(cmd==LINUX_REBOOT_CMD_KEXEC) {
82 /* We only trust the superuser with rebooting the system. */
83 if (!capable(CAP_SYS_BOOT))
84 return -EPERM;
85
86 /* For safety, we require "magic" arguments. */
87 if (magic1 != LINUX_REBOOT_MAGIC1 ||
88 (magic2 != LINUX_REBOOT_MAGIC2 &&
89 magic2 != LINUX_REBOOT_MAGIC2A &&
90 magic2 != LINUX_REBOOT_MAGIC2B &&
91 magic2 != LINUX_REBOOT_MAGIC2C))
92 return -EINVAL;
93
94 lock_kernel();
95 ret = kernel_kexec();
96 unlock_kernel();
97 return ret;
98 } else {
99 return original_reboot(magic1, magic2, cmd, arg);
100 }
101}
Impressum, Datenschutz