[PATCH] discover/syslinux-parser: consistent cmdline arg processing
Samuel Mendoza-Jonas
sam at mendozajonas.com
Tue Jun 12 15:19:10 AEST 2018
On Mon, 2018-06-11 at 07:54 +1000, Brett Grandbois wrote:
> In signed-boot environments consistent handling of kernel commandline
> options is essential as they must be pre-signed. In the syslinux parser
> ensure that in the absence of a global APPEND they are processed
> exactly as found and not with the leading space that the current APPEND
> processing has as a shortcut.
>
> Signed-off-by: Brett Grandbois <brett.grandbois at opengear.com>
Merged as 0e9f4d38
> ---
> discover/syslinux-parser.c | 11 +++++------
> test/parser/test-syslinux-explicit.c | 2 +-
> test/parser/test-syslinux-global-append.c | 19 +++++++++++++++----
> test/parser/test-syslinux-single-yocto.c | 2 +-
> 4 files changed, 22 insertions(+), 12 deletions(-)
>
> diff --git a/discover/syslinux-parser.c b/discover/syslinux-parser.c
> index be7b94a..4b82433 100644
> --- a/discover/syslinux-parser.c
> +++ b/discover/syslinux-parser.c
> @@ -338,11 +338,13 @@ static void syslinux_finalize(struct conf_context *conf)
> /* '-' can signal do not use global APPEND */
> if (!strcmp(syslinux_opt->append, "-"))
> opt->boot_args = talloc_strdup(opt, "");
> - else
> + else if (global_append)
> opt->boot_args = talloc_asprintf(opt, "%s %s",
> global_append,
> syslinux_opt->append);
> - } else
> + else
> + opt->boot_args = talloc_strdup(opt, syslinux_opt->append);
> + } else if (global_append)
> opt->boot_args = talloc_strdup(opt, global_append);
>
> if (!opt->boot_args)
> @@ -454,13 +456,10 @@ static int syslinux_parse(struct discover_context *dc)
> /*
> * set the global defaults
> * by spec 'default' defaults to 'linux' and
> - * 'implicit' defaults to '1', we also just set
> - * and empty string in 'append' to make it easier
> - * in syslinux_finish
> + * 'implicit' defaults to '1'
> */
> conf_set_global_option(conf, "default", "linux");
> conf_set_global_option(conf, "implicit", "1");
> - conf_set_global_option(conf, "append", "");
>
> for (filename = syslinux_conf_files; *filename; filename++) {
> /*
> diff --git a/test/parser/test-syslinux-explicit.c b/test/parser/test-syslinux-explicit.c
> index 5d23f50..82030bf 100644
> --- a/test/parser/test-syslinux-explicit.c
> +++ b/test/parser/test-syslinux-explicit.c
> @@ -36,6 +36,6 @@ void run_test(struct parser_test *test)
>
> check_name(opt, "backup");
> check_resolved_local_resource(opt->boot_image, ctx->device, "/backup/vmlinuz");
> - check_args(opt, " root=/dev/sdb");
> + check_args(opt, "root=/dev/sdb");
> check_resolved_local_resource(opt->initrd, ctx->device, "/boot/initrd");
> }
> diff --git a/test/parser/test-syslinux-global-append.c b/test/parser/test-syslinux-global-append.c
> index 18af99a..af2e9af 100644
> --- a/test/parser/test-syslinux-global-append.c
> +++ b/test/parser/test-syslinux-global-append.c
> @@ -18,6 +18,9 @@ LABEL hyphen
> KERNEL /test/vmlinuz
> APPEND -
>
> +LABEL onlyglobal
> +KERNEL /only/vmlinuz
> +
> #endif
>
> void run_test(struct parser_test *test)
> @@ -31,8 +34,9 @@ void run_test(struct parser_test *test)
>
> ctx = test->ctx;
>
> - check_boot_option_count(ctx, 3);
> - opt = get_boot_option(ctx, 2);
> + check_boot_option_count(ctx, 4);
> +
> + opt = get_boot_option(ctx, 3);
>
> check_name(opt, "linux");
> check_resolved_local_resource(opt->boot_image, ctx->device, "/vmlinuz");
> @@ -40,17 +44,24 @@ void run_test(struct parser_test *test)
> check_args(opt, "console=ttyS0 console=tty0");
> check_not_present_resource(opt->initrd);
>
> - opt = get_boot_option(ctx, 1);
> + opt = get_boot_option(ctx, 2);
>
> check_name(opt, "backup");
> check_resolved_local_resource(opt->boot_image, ctx->device, "/backup/vmlinuz");
> check_args(opt, "console=ttyS0 root=/dev/sdb");
> check_resolved_local_resource(opt->initrd, ctx->device, "/boot/initrd");
>
> - opt = get_boot_option(ctx, 0);
> + opt = get_boot_option(ctx, 1);
>
> check_name(opt, "hyphen");
> check_resolved_local_resource(opt->boot_image, ctx->device, "/test/vmlinuz");
> check_args(opt, "");
> check_not_present_resource(opt->initrd);
> +
> + opt = get_boot_option(ctx, 0);
> +
> + check_name(opt, "onlyglobal");
> + check_resolved_local_resource(opt->boot_image, ctx->device, "/only/vmlinuz");
> + check_args(opt, "console=ttyS0");
> + check_not_present_resource(opt->initrd);
> }
> diff --git a/test/parser/test-syslinux-single-yocto.c b/test/parser/test-syslinux-single-yocto.c
> index e5e084d..dd26577 100644
> --- a/test/parser/test-syslinux-single-yocto.c
> +++ b/test/parser/test-syslinux-single-yocto.c
> @@ -32,5 +32,5 @@ void run_test(struct parser_test *test)
> check_name(opt, "boot");
> check_resolved_local_resource(opt->boot_image, ctx->device, "/vmlinuz");
> check_is_default(opt);
> - check_args(opt, " console=ttyS0,115200n8 console=tty0");
> + check_args(opt, "console=ttyS0,115200n8 console=tty0");
> }
More information about the Petitboot
mailing list