Throw out the obsolete INIT_CHROOT junk
This commit is contained in:
parent
28a78ab62c
commit
f6a7227fd6
91
init.c
91
init.c
@ -660,94 +660,6 @@ static void reboot_signal(int sig)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined BB_FEATURE_INIT_CHROOT
|
|
||||||
|
|
||||||
#warning BB_FEATURE_INIT_CHROOT is out of date and should be rewritten to us
|
|
||||||
#warning pivot root instead. Do not even bother till this work is done...
|
|
||||||
#warning You have been warned.
|
|
||||||
|
|
||||||
static void check_chroot(int sig)
|
|
||||||
{
|
|
||||||
char *argv_init[2] = { "init", NULL, };
|
|
||||||
char *envp_init[3] = { "HOME=/", "TERM=linux", NULL, };
|
|
||||||
char rootpath[256], *tc;
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
if ((fd = open("/proc/sys/kernel/init-chroot", O_RDONLY)) == -1) {
|
|
||||||
message(CONSOLE,
|
|
||||||
"SIGHUP recived, but could not open proc file\r\n");
|
|
||||||
sleep(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (read(fd, rootpath, sizeof(rootpath)) == -1) {
|
|
||||||
message(CONSOLE,
|
|
||||||
"SIGHUP recived, but could not read proc file\r\n");
|
|
||||||
sleep(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
if (rootpath[0] == '\0') {
|
|
||||||
message(CONSOLE,
|
|
||||||
"SIGHUP recived, but new root is not valid: %s\r\n",
|
|
||||||
rootpath);
|
|
||||||
sleep(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tc = strrchr(rootpath, '\n');
|
|
||||||
*tc = '\0';
|
|
||||||
|
|
||||||
/* Ok, making it this far means we commit */
|
|
||||||
message(CONSOLE, "Please stand by, changing root to `%s'.\r\n",
|
|
||||||
rootpath);
|
|
||||||
|
|
||||||
/* kill all other programs first */
|
|
||||||
message(CONSOLE, "Sending SIGTERM to all processes.\r\n");
|
|
||||||
kill(-1, SIGTERM);
|
|
||||||
sleep(2);
|
|
||||||
sync();
|
|
||||||
|
|
||||||
message(CONSOLE, "Sending SIGKILL to all processes.\r\n");
|
|
||||||
kill(-1, SIGKILL);
|
|
||||||
sleep(2);
|
|
||||||
sync();
|
|
||||||
|
|
||||||
/* ok, we don't need /proc anymore. we also assume that the signaling
|
|
||||||
* process left the rest of the filesystems alone for us */
|
|
||||||
umount("/proc");
|
|
||||||
|
|
||||||
/* Ok, now we chroot. Hopefully we only have two things mounted, the
|
|
||||||
* new chroot'd mount point, and the old "/" mount. s,
|
|
||||||
* we go ahead and unmount the old "/". This should trigger the kernel
|
|
||||||
* to set things up the Right Way(tm). */
|
|
||||||
|
|
||||||
if (!chroot(rootpath))
|
|
||||||
umount("/dev/root");
|
|
||||||
|
|
||||||
/* If the chroot fails, we are already too far to turn back, so we
|
|
||||||
* continue and hope that executing init below will revive the system */
|
|
||||||
|
|
||||||
/* close all of our descriptors and open new ones */
|
|
||||||
close(0);
|
|
||||||
close(1);
|
|
||||||
close(2);
|
|
||||||
open("/dev/console", O_RDWR, 0);
|
|
||||||
dup(0);
|
|
||||||
dup(0);
|
|
||||||
|
|
||||||
message(CONSOLE, "Executing real init...\r\n");
|
|
||||||
/* execute init in the (hopefully) new root */
|
|
||||||
execve("/sbin/init", argv_init, envp_init);
|
|
||||||
|
|
||||||
message(CONSOLE,
|
|
||||||
"ERROR: Could not exec new init. Press %s to reboot.\r\n",
|
|
||||||
(secondConsole == NULL) /* serial console */
|
|
||||||
? "Reset" : "CTRL-ALT-DEL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif /* BB_FEATURE_INIT_CHROOT */
|
|
||||||
|
|
||||||
#endif /* ! DEBUG_INIT */
|
#endif /* ! DEBUG_INIT */
|
||||||
|
|
||||||
void new_initAction(initActionEnum action, char *process, char *cons)
|
void new_initAction(initActionEnum action, char *process, char *cons)
|
||||||
@ -945,9 +857,6 @@ extern int init_main(int argc, char **argv)
|
|||||||
signal(SIGUSR2, halt_signal);
|
signal(SIGUSR2, halt_signal);
|
||||||
signal(SIGINT, reboot_signal);
|
signal(SIGINT, reboot_signal);
|
||||||
signal(SIGTERM, reboot_signal);
|
signal(SIGTERM, reboot_signal);
|
||||||
#if defined BB_FEATURE_INIT_CHROOT
|
|
||||||
signal(SIGHUP, check_chroot);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Turn off rebooting via CTL-ALT-DEL -- we get a
|
/* Turn off rebooting via CTL-ALT-DEL -- we get a
|
||||||
* SIGINT on CAD so we can shut things down gracefully... */
|
* SIGINT on CAD so we can shut things down gracefully... */
|
||||||
|
91
init/init.c
91
init/init.c
@ -660,94 +660,6 @@ static void reboot_signal(int sig)
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined BB_FEATURE_INIT_CHROOT
|
|
||||||
|
|
||||||
#warning BB_FEATURE_INIT_CHROOT is out of date and should be rewritten to us
|
|
||||||
#warning pivot root instead. Do not even bother till this work is done...
|
|
||||||
#warning You have been warned.
|
|
||||||
|
|
||||||
static void check_chroot(int sig)
|
|
||||||
{
|
|
||||||
char *argv_init[2] = { "init", NULL, };
|
|
||||||
char *envp_init[3] = { "HOME=/", "TERM=linux", NULL, };
|
|
||||||
char rootpath[256], *tc;
|
|
||||||
int fd;
|
|
||||||
|
|
||||||
if ((fd = open("/proc/sys/kernel/init-chroot", O_RDONLY)) == -1) {
|
|
||||||
message(CONSOLE,
|
|
||||||
"SIGHUP recived, but could not open proc file\r\n");
|
|
||||||
sleep(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (read(fd, rootpath, sizeof(rootpath)) == -1) {
|
|
||||||
message(CONSOLE,
|
|
||||||
"SIGHUP recived, but could not read proc file\r\n");
|
|
||||||
sleep(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
if (rootpath[0] == '\0') {
|
|
||||||
message(CONSOLE,
|
|
||||||
"SIGHUP recived, but new root is not valid: %s\r\n",
|
|
||||||
rootpath);
|
|
||||||
sleep(2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
tc = strrchr(rootpath, '\n');
|
|
||||||
*tc = '\0';
|
|
||||||
|
|
||||||
/* Ok, making it this far means we commit */
|
|
||||||
message(CONSOLE, "Please stand by, changing root to `%s'.\r\n",
|
|
||||||
rootpath);
|
|
||||||
|
|
||||||
/* kill all other programs first */
|
|
||||||
message(CONSOLE, "Sending SIGTERM to all processes.\r\n");
|
|
||||||
kill(-1, SIGTERM);
|
|
||||||
sleep(2);
|
|
||||||
sync();
|
|
||||||
|
|
||||||
message(CONSOLE, "Sending SIGKILL to all processes.\r\n");
|
|
||||||
kill(-1, SIGKILL);
|
|
||||||
sleep(2);
|
|
||||||
sync();
|
|
||||||
|
|
||||||
/* ok, we don't need /proc anymore. we also assume that the signaling
|
|
||||||
* process left the rest of the filesystems alone for us */
|
|
||||||
umount("/proc");
|
|
||||||
|
|
||||||
/* Ok, now we chroot. Hopefully we only have two things mounted, the
|
|
||||||
* new chroot'd mount point, and the old "/" mount. s,
|
|
||||||
* we go ahead and unmount the old "/". This should trigger the kernel
|
|
||||||
* to set things up the Right Way(tm). */
|
|
||||||
|
|
||||||
if (!chroot(rootpath))
|
|
||||||
umount("/dev/root");
|
|
||||||
|
|
||||||
/* If the chroot fails, we are already too far to turn back, so we
|
|
||||||
* continue and hope that executing init below will revive the system */
|
|
||||||
|
|
||||||
/* close all of our descriptors and open new ones */
|
|
||||||
close(0);
|
|
||||||
close(1);
|
|
||||||
close(2);
|
|
||||||
open("/dev/console", O_RDWR, 0);
|
|
||||||
dup(0);
|
|
||||||
dup(0);
|
|
||||||
|
|
||||||
message(CONSOLE, "Executing real init...\r\n");
|
|
||||||
/* execute init in the (hopefully) new root */
|
|
||||||
execve("/sbin/init", argv_init, envp_init);
|
|
||||||
|
|
||||||
message(CONSOLE,
|
|
||||||
"ERROR: Could not exec new init. Press %s to reboot.\r\n",
|
|
||||||
(secondConsole == NULL) /* serial console */
|
|
||||||
? "Reset" : "CTRL-ALT-DEL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif /* BB_FEATURE_INIT_CHROOT */
|
|
||||||
|
|
||||||
#endif /* ! DEBUG_INIT */
|
#endif /* ! DEBUG_INIT */
|
||||||
|
|
||||||
void new_initAction(initActionEnum action, char *process, char *cons)
|
void new_initAction(initActionEnum action, char *process, char *cons)
|
||||||
@ -945,9 +857,6 @@ extern int init_main(int argc, char **argv)
|
|||||||
signal(SIGUSR2, halt_signal);
|
signal(SIGUSR2, halt_signal);
|
||||||
signal(SIGINT, reboot_signal);
|
signal(SIGINT, reboot_signal);
|
||||||
signal(SIGTERM, reboot_signal);
|
signal(SIGTERM, reboot_signal);
|
||||||
#if defined BB_FEATURE_INIT_CHROOT
|
|
||||||
signal(SIGHUP, check_chroot);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Turn off rebooting via CTL-ALT-DEL -- we get a
|
/* Turn off rebooting via CTL-ALT-DEL -- we get a
|
||||||
* SIGINT on CAD so we can shut things down gracefully... */
|
* SIGINT on CAD so we can shut things down gracefully... */
|
||||||
|
Loading…
Reference in New Issue
Block a user