Filter bootloader supplied kernel cmdline options
Various bootloader add kernel commandline options dynamically, filter these out when grabbing boot options from /proc/cmdline. Specifically grub adds BOOT_IMAGE and systemd-boot adds initrd. Closes: #560 Approved by: cgwalters
This commit is contained in:
parent
8ae03d6497
commit
f0e493bf29
|
|
@ -53,6 +53,23 @@ split_keyeq (char *arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_arg_has_prefix (const char *arg,
|
||||||
|
char **prefixes)
|
||||||
|
{
|
||||||
|
char **strviter;
|
||||||
|
|
||||||
|
for (strviter = prefixes; strviter && *strviter; strviter++)
|
||||||
|
{
|
||||||
|
const char *prefix = *strviter;
|
||||||
|
|
||||||
|
if (g_str_has_prefix (arg, prefix))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
OstreeKernelArgs *
|
OstreeKernelArgs *
|
||||||
_ostree_kernel_args_new (void)
|
_ostree_kernel_args_new (void)
|
||||||
{
|
{
|
||||||
|
|
@ -154,18 +171,28 @@ _ostree_kernel_args_replace_argv (OstreeKernelArgs *kargs,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_ostree_kernel_args_append_argv (OstreeKernelArgs *kargs,
|
_ostree_kernel_args_append_argv_filtered (OstreeKernelArgs *kargs,
|
||||||
char **argv)
|
char **argv,
|
||||||
|
char **prefixes)
|
||||||
{
|
{
|
||||||
char **strviter;
|
char **strviter;
|
||||||
|
|
||||||
for (strviter = argv; strviter && *strviter; strviter++)
|
for (strviter = argv; strviter && *strviter; strviter++)
|
||||||
{
|
{
|
||||||
const char *arg = *strviter;
|
const char *arg = *strviter;
|
||||||
_ostree_kernel_args_append (kargs, arg);
|
|
||||||
|
if (!_arg_has_prefix (arg, prefixes))
|
||||||
|
_ostree_kernel_args_append (kargs, arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_ostree_kernel_args_append_argv (OstreeKernelArgs *kargs,
|
||||||
|
char **argv)
|
||||||
|
{
|
||||||
|
_ostree_kernel_args_append_argv_filtered (kargs, argv, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs,
|
_ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
|
|
@ -175,6 +202,13 @@ _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs,
|
||||||
g_autofree char *proc_cmdline = NULL;
|
g_autofree char *proc_cmdline = NULL;
|
||||||
gsize proc_cmdline_len = 0;
|
gsize proc_cmdline_len = 0;
|
||||||
g_auto(GStrv) proc_cmdline_args = NULL;
|
g_auto(GStrv) proc_cmdline_args = NULL;
|
||||||
|
/* When updating the filter list don't forget to update the list in the tests
|
||||||
|
* e.g. tests/test-admin-deploy-karg.sh and
|
||||||
|
* tests/test-admin-instutil-set-kargs.sh
|
||||||
|
*/
|
||||||
|
char *filtered_prefixes[] = { "BOOT_IMAGE=", /* GRUB 2 */
|
||||||
|
"initrd=", /* sd-boot */
|
||||||
|
NULL };
|
||||||
|
|
||||||
if (!g_file_load_contents (proc_cmdline_path, cancellable,
|
if (!g_file_load_contents (proc_cmdline_path, cancellable,
|
||||||
&proc_cmdline, &proc_cmdline_len,
|
&proc_cmdline, &proc_cmdline_len,
|
||||||
|
|
@ -184,7 +218,8 @@ _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs,
|
||||||
g_strchomp (proc_cmdline);
|
g_strchomp (proc_cmdline);
|
||||||
|
|
||||||
proc_cmdline_args = g_strsplit (proc_cmdline, " ", -1);
|
proc_cmdline_args = g_strsplit (proc_cmdline, " ", -1);
|
||||||
_ostree_kernel_args_append_argv (kargs, proc_cmdline_args);
|
_ostree_kernel_args_append_argv_filtered (kargs, proc_cmdline_args,
|
||||||
|
filtered_prefixes);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,9 @@ void _ostree_kernel_args_append (OstreeKernelArgs *kargs,
|
||||||
const char *key);
|
const char *key);
|
||||||
void _ostree_kernel_args_append_argv (OstreeKernelArgs *kargs,
|
void _ostree_kernel_args_append_argv (OstreeKernelArgs *kargs,
|
||||||
char **argv);
|
char **argv);
|
||||||
|
void _ostree_kernel_args_append_argv_filtered (OstreeKernelArgs *kargs,
|
||||||
|
char **argv,
|
||||||
|
char **prefixes);
|
||||||
|
|
||||||
gboolean _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs,
|
gboolean _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs,
|
||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ ${CMD_PREFIX} ostree admin deploy --karg-proc-cmdline --os=testos testos:testos/
|
||||||
for arg in $(cat /proc/cmdline); do
|
for arg in $(cat /proc/cmdline); do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
ostree=*) # Skip ostree arg that gets stripped out
|
ostree=*) # Skip ostree arg that gets stripped out
|
||||||
|
;;
|
||||||
|
initrd=*|BOOT_IMAGE=*) # Skip options set by bootloader that gets filtered out
|
||||||
;;
|
;;
|
||||||
*) assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf "options.*$arg"
|
*) assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf "options.*$arg"
|
||||||
;;
|
;;
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,8 @@ for arg in $(cat /proc/cmdline); do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
ostree=*) # Skip ostree arg that gets stripped out
|
ostree=*) # Skip ostree arg that gets stripped out
|
||||||
;;
|
;;
|
||||||
|
initrd=*|BOOT_IMAGE=*) # Skip options set by bootloader that gets filtered out
|
||||||
|
;;
|
||||||
*) assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf "options.*$arg"
|
*) assert_file_has_content sysroot/boot/loader/entries/ostree-testos-0.conf "options.*$arg"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue