[PATCH openbmc 30/32] init: Add a hook to download files

Joel Stanley joel at jms.id.au
Mon Mar 7 11:33:30 AEDT 2016


On Sat, Mar 5, 2016 at 11:00 PM, OpenBMC Patches
<openbmc-patches at stwcx.xyz> wrote:
> From: "Milton D. Miller II" <miltonm at us.ibm.com>
>
> Add a hook to run a shell command line that is stored in a u-boot
> environment variable.  Only execute this command if the previously
> established options file has a keyword trigger.  Do not even consider
> the option if a build option flag is not set to y.

This patch should not be merged. It creates a worrying backdoor into
our system where the boot process will run arbitrary commands from
untrusted u-boot variables.

If we need to set state in u-boot in order to trigger an update, then
I can imagine we might allow a flag to be set that says "do_update=1",
and the system can pick up on this and grab updates from it's
configured update source.

Cheers,

Joel

>
> This allows one to specify at u-boot commands that would download
> a read-only file system into memory for execution this boot instead
> of needing to create a custom initramfs to netboot or specifing
> debug-init-sh, entering the password, and doing the download from
> the shell.
>
> If the u-boot environment variable is empty or missing but both
> the build variable is set and the keyword trigger are set print
> a diagnostic message.  If the command fails invoke standard
> debug_takeover for corrective action.
>
> An example script:
> fw_setenv openbmcinitdownload 'cp /proc/net/pnp /run/resolv.conf ; ln -snf ../run/resolv.conf /etc/resolv.conf ; wget -O /run/image-rofs http://server.example.com/path/image-test-rofs'
> ---
>  .../obmc-phosphor-initfs/files/obmc-init.sh               | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh b/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh
> index 87f71e6..71a72fb 100644
> --- a/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh
> +++ b/meta-phosphor/common/recipes-phosphor/obmc-phosphor-initfs/files/obmc-init.sh
> @@ -101,6 +101,7 @@ rwdev=/dev/mtdblock${rwfs#mtd}
>  # Set to y for yes, anything else for no.
>  force_rwfst_jffs2=y
>  flash_images_before_init=n
> +consider_openbmc_download_files=y
>
>  rofst=squashfs
>  rwfst=$(probe_fs_type $rwdev)
> @@ -131,6 +132,20 @@ then
>         debug_takeover "Debug initial shell requested by command line."
>  fi
>
> +if test "x$consider_openbmc_download_files" = xy &&
> +       grep -w openbmc-init-download-files $optfile
> +then
> +       echo "Executing download hook..."
> +       cmd="$(get_fw_env_var openbmcinitdownload)"
> +       if test -z "$cmd"
> +       then
> +               echo 2>&1 "Download command not found or empty, skipping."
> +       elif ! sh -xc "$cmd"
> +       then
> +               debug_takeover "Download command '$cmd' failed."
> +       fi
> +fi
> +
>  # If there are images in root move them to /run/initramfs/ or /run/ now.
>  imagebasename=${image##*/}
>  if test -n "${imagebasename}" && ls /${imagebasename}* > /dev/null 2>&1
> --
> 2.7.1
>
>
> _______________________________________________
> openbmc mailing list
> openbmc at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/openbmc


More information about the openbmc mailing list