mirror of
https://github.com/troglobit/finit.git
synced 2026-10-16 10:39:35 +00:00
Drop parsing of /proc/cmdline by default, instead use argc + argv[]
For most use-cases the kernel will give Finit its arguments as proper command line args in argc + argv[], like any other program. However, for some users, most notably Alpine Linux, there is a slightly broken initramfs that cannot forward more than one argument using init_args, for such systems you can re-enable the old behavior with a configure switch --enable-kernel-cmdline -- it's not ideal but what can you do. The main reason for removing this feature by default is to support use-cases where Finit runs as the init for container apps that can read /proc -- we do not want them to use the init args from the host. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
55e9cb2f58
commit
cc6ffa35fc
4 files changed
+43
-11
No files matched your search
+30
-11
@@ -145,24 +145,27 @@ static void parse_arg(char *arg)
|
||||
single = 1;
|
||||
}
|
||||
|
||||
void conf_parse_cmdline(int argc, char *argv[])
|
||||
#ifdef KERNEL_CMDLINE
|
||||
/*
|
||||
* Parse /proc/cmdline to find args for init. Don't use this!
|
||||
*
|
||||
* Instead, rely on the kernel to give Finit its arguments as
|
||||
* regular argc + argv[]. Only use this if the system you run
|
||||
* on has a broken initramfs system that cannot forward args
|
||||
* to Finit properly.
|
||||
*/
|
||||
static void parse_kernel_cmdline(void)
|
||||
{
|
||||
int dbg = 0;
|
||||
FILE *fp;
|
||||
char line[LINE_SIZE], *cmdline, *tok;
|
||||
|
||||
for (int i = 1; i < argc; i++)
|
||||
parse_arg(argv[i]);
|
||||
|
||||
hide_args(argc, argv);
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen("/proc/cmdline", "r");
|
||||
if (!fp)
|
||||
goto done;
|
||||
return;
|
||||
|
||||
if (!fgets(line, sizeof(line), fp)) {
|
||||
fclose(fp);
|
||||
goto done;
|
||||
return;
|
||||
}
|
||||
|
||||
cmdline = chomp(line);
|
||||
@@ -173,8 +176,24 @@ void conf_parse_cmdline(int argc, char *argv[])
|
||||
parse_arg(tok);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
#else
|
||||
#define parse_kernel_cmdline()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Kernel gives us all non-kernel options on our cmdline
|
||||
*/
|
||||
void conf_parse_cmdline(int argc, char *argv[])
|
||||
{
|
||||
int dbg = 0;
|
||||
|
||||
for (int i = 1; i < argc; i++)
|
||||
parse_arg(argv[i]);
|
||||
|
||||
hide_args(argc, argv);
|
||||
parse_kernel_cmdline();
|
||||
|
||||
done:
|
||||
log_init(dbg);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user