From f57406f3ab1185ccb3fc16321ae2205ff7725f8c Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Apr 29 2020 16:36:57 +0000 Subject: grubby-bls: fix corner case when a kernel param value contains a '=' If a kernel command line parameter has a '=' character, grubby fails to update the options field in the BLS snippet, for example: $ grubby --update-kernel=foo --args="bar=https://test?token=" sed: -e expression #1, char 30: unknown option to `s' Signed-off-by: Javier Martinez Canillas --- diff --git a/grubby-bls b/grubby-bls index 01ba96b..01b99bf 100755 --- a/grubby-bls +++ b/grubby-bls @@ -460,7 +460,7 @@ update_args() { for arg in ${remove_args[*]}; do if [[ $arg = *"="* ]]; then - arg=$(echo $arg | sed -e 's/\//\\\//g') + arg="$(echo $arg | sed -e 's/\//\\\//g')" args="$(echo $args | sed -E "s/(^|[[:space:]])$arg([[:space:]]|$)/ /")" else args="$(echo $args | sed -E "s/(^|[[:space:]])$arg(([[:space:]]|$)|([=][^ ]*([$]*)))/ /g")" @@ -468,7 +468,7 @@ update_args() { done for arg in ${add_args[*]}; do - arg=${arg%=*} + arg="${arg%%=*}" args="$(echo $args | sed -E "s/(^|[[:space:]])$arg(([[:space:]]|$)|([=][^ ]*([$]*)))/ /g")" done