aboutsummaryrefslogtreecommitdiff
path: root/src/rc/openrc-init.c
AgeCommit message (Collapse)Author
2019-02-25openrc-init: fix waitpid checksWilliam Hubbs
The do_openrc() function was not waiting properly for the child process which started the runlevel to return. We need to repeatedly call waitpid() until its return value matches the pid of the child process or the child process does not exist. This fixes #216. This fixes #300.
2018-11-27fix misc whitespace issuesAustin English
2018-11-02openrc-init: add SELinux supportWilliam Hubbs
This is for #173.
2018-10-13misc: style fixupsAustin English
2018-10-06openrc-init: convert sleep() call to nanosleep()William Hubbs
Nanosleep is the safer call to use in case we need to use alarms eventually.
2018-02-26openrc-init: convert execl calls to execlpWilliam Hubbs
2018-02-24openrc-init: set a default pathWilliam Hubbs
The default path provided by the system if one isn't set only includes "/bin:/usr/bin". This adds the default path setting from sysvinit.
2017-06-04add support for writing reboot and shutdown records to wtmpWilliam Hubbs
2017-05-30openrc-init: fix buffer overflow in init.ctlSergei Trofimovich
How to reproduce 1-byte overflow: ``` $ FEATURES=-test CFLAGS="-fsanitize=address -O0 -ggdb3" emerge -1 openrc ================================================================= ==1==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff0efd8710 at pc 0x000000402076 bp 0x7fff0efd7d50 sp 0x7fff0efd7d40 WRITE of size 1 at 0x7fff0efd8710 thread T0 #0 0x402075 (/sbin/openrc-init+0x402075) #1 0x3cf6e2070f in __libc_start_main (/lib64/libc.so.6+0x3cf6e2070f) #2 0x4013b8 (/sbin/openrc-init+0x4013b8) Address 0x7fff0efd8710 is located in stack of thread T0 at offset 2432 in frame #0 0x401cfb (/sbin/openrc-init+0x401cfb) This frame has 3 object(s): [32, 160) 'signals' [192, 344) 'sa' [384, 2432) 'buf' <== Memory access at offset 2432 overflows this variable HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext (longjmp and C++ exceptions *are* supported) SUMMARY: AddressSanitizer: stack-buffer-overflow ??:0 ?? ``` The problem here is in the code handling reads from 'init.ctl': ``` int main(int argc, char **argv) { ... char buf[2048]; for (;;) { /* This will block until a command is sent down the pipe... */ fifo = fopen(RC_INIT_FIFO, "r"); count = fread(buf, 1, 2048, fifo); buf[count] = 0; ... } ``` `buf[count] = 0;` writes outside the buffer when `fread()` returns non-truncated read. This fixes #138.
2017-05-22init: add ability to switch to single user modeWilliam Hubbs
2017-04-17init: send term/kill signals as final step of shutdownWilliam Hubbs
2017-04-13init: fix signal handlingWilliam Hubbs
The only signals we handle are SIGINT and SIGCHLD, so block all others and unblock them in the child process before we start a rurnlevel.
2017-04-12init: add re-exec capabilityWilliam Hubbs
This will allow the re-execution of the init process after upgrading OpenRC.
2017-04-07Add attribution to openrc-init.c and openrc-shutdown.cWilliam Hubbs
2017-04-06add init processWilliam Hubbs
openrc-init.c and openrc-shutdown.c are based on code which was written by James Hammons <jlhamm@acm.org>, so I would like to publically thank him for his work.