From a52e3d4a52954c9ce3498cd8e2de0dc962bd2da6 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Thu, 3 Nov 2016 15:48:18 -0600 Subject: [PATCH] Filter bootloader supplied kernel cmdline options * d/p/Filter-bootloader-supplied-kernel-cmdline-options.patch: - Filter out kernel command line parameters set by the bootloading when deriving the configuration from /proc/cmdline. * Add myself to uploaders --- debian/changelog | 9 ++ debian/control | 1 + ...ader-supplied-kernel-cmdline-options.patch | 145 ++++++++++++++++++ debian/patches/series | 1 + 4 files changed, 156 insertions(+) create mode 100644 debian/patches/Filter-bootloader-supplied-kernel-cmdline-options.patch diff --git a/debian/changelog b/debian/changelog index efa8c486..208d98cc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +ostree (2016.12-2) unstable; urgency=medium + + * d/p/Filter-bootloader-supplied-kernel-cmdline-options.patch: + - Filter out kernel command line parameters set by the bootloading when + deriving the configuration from /proc/cmdline. + * Add myself to uploaders + + -- Sjoerd Simons Thu, 03 Nov 2016 15:48:01 -0600 + ostree (2016.12-1) unstable; urgency=medium * Force LC_ALL=C.UTF-8 during build, so that builds in non-English diff --git a/debian/control b/debian/control index b4d9d689..ae5b273c 100644 --- a/debian/control +++ b/debian/control @@ -5,6 +5,7 @@ Maintainer: Utopia Maintenance Team , Simon McVittie , + Sjoerd Simons Build-Depends: attr, bison, diff --git a/debian/patches/Filter-bootloader-supplied-kernel-cmdline-options.patch b/debian/patches/Filter-bootloader-supplied-kernel-cmdline-options.patch new file mode 100644 index 00000000..8ffe864c --- /dev/null +++ b/debian/patches/Filter-bootloader-supplied-kernel-cmdline-options.patch @@ -0,0 +1,145 @@ +From f0e493bf2992d752ec3cf517542e60d9ea376be4 Mon Sep 17 00:00:00 2001 +From: Sjoerd Simons +Date: Sun, 30 Oct 2016 21:06:27 +0100 +Subject: [PATCH] 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 +--- + src/libostree/ostree-kernel-args.c | 43 ++++++++++++++++++++++++++++++---- + src/libostree/ostree-kernel-args.h | 3 +++ + tests/test-admin-deploy-karg.sh | 2 ++ + tests/test-admin-instutil-set-kargs.sh | 2 ++ + 4 files changed, 46 insertions(+), 4 deletions(-) + +diff --git a/src/libostree/ostree-kernel-args.c b/src/libostree/ostree-kernel-args.c +index ec189fc..22b5caa 100644 +--- a/src/libostree/ostree-kernel-args.c ++++ b/src/libostree/ostree-kernel-args.c +@@ -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 * + _ostree_kernel_args_new (void) + { +@@ -154,18 +171,28 @@ _ostree_kernel_args_replace_argv (OstreeKernelArgs *kargs, + } + + void +-_ostree_kernel_args_append_argv (OstreeKernelArgs *kargs, +- char **argv) ++_ostree_kernel_args_append_argv_filtered (OstreeKernelArgs *kargs, ++ char **argv, ++ char **prefixes) + { + char **strviter; + + for (strviter = argv; strviter && *strviter; 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 + _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs, + GCancellable *cancellable, +@@ -175,6 +202,13 @@ _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs, + g_autofree char *proc_cmdline = NULL; + gsize proc_cmdline_len = 0; + 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, + &proc_cmdline, &proc_cmdline_len, +@@ -184,7 +218,8 @@ _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs, + g_strchomp (proc_cmdline); + + 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; + } +diff --git a/src/libostree/ostree-kernel-args.h b/src/libostree/ostree-kernel-args.h +index 18710d7..ceaa1ca 100644 +--- a/src/libostree/ostree-kernel-args.h ++++ b/src/libostree/ostree-kernel-args.h +@@ -39,6 +39,9 @@ void _ostree_kernel_args_append (OstreeKernelArgs *kargs, + const char *key); + void _ostree_kernel_args_append_argv (OstreeKernelArgs *kargs, + char **argv); ++void _ostree_kernel_args_append_argv_filtered (OstreeKernelArgs *kargs, ++ char **argv, ++ char **prefixes); + + gboolean _ostree_kernel_args_append_proc_cmdline (OstreeKernelArgs *kargs, + GCancellable *cancellable, +diff --git a/tests/test-admin-deploy-karg.sh b/tests/test-admin-deploy-karg.sh +index b7305f4..643aef7 100755 +--- a/tests/test-admin-deploy-karg.sh ++++ b/tests/test-admin-deploy-karg.sh +@@ -46,6 +46,8 @@ ${CMD_PREFIX} ostree admin deploy --karg-proc-cmdline --os=testos testos:testos/ + for arg in $(cat /proc/cmdline); do + case "$arg" in + 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" + ;; +diff --git a/tests/test-admin-instutil-set-kargs.sh b/tests/test-admin-instutil-set-kargs.sh +index 40f4b74..132c933 100755 +--- a/tests/test-admin-instutil-set-kargs.sh ++++ b/tests/test-admin-instutil-set-kargs.sh +@@ -58,6 +58,8 @@ for arg in $(cat /proc/cmdline); do + case "$arg" in + 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" + ;; + esac +-- +2.10.2 + diff --git a/debian/patches/series b/debian/patches/series index f7aff86e..0b5a666d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ Terminate-individual-tests-after-half-an-hour.patch dist/Retrieve-some-missing-test-files-from-upstream-git.patch +Filter-bootloader-supplied-kernel-cmdline-options.patch