[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [livepatch-build-tools: independ. modules] livepatch-build: Embed hypervisor build id into every hotpatch



On Tue, Apr 16, 2019 at 12:57:14PM +0000, Pawel Wieczorkiewicz wrote:
> This change is part of a independant stacked hotpatch modules
> feature. This feature allows to bypass dependencies between modules
> upon loading, but still verifies Xen build ID matching.
> 
> With stacked hotpatch modules it is essential that each and every
> hotpatch is verified against the hypervisor build id upon upload.
> It must not be possible to successfully upload hotpatches built for
> incorrect version of the hypervisor.
> 
> To achieve that always embed an additional ELF section:
> '.livpatch.xen_depends' containing the hypervisor build id.
> 
> The hypervisor build id must be always provided as a command line
> parameter: --xen-depends.
> 
> Signed-off-by: Pawel Wieczorkiewicz <wipawel@xxxxxxxxx>
> Reviewed-by: Andra-Irina Paraschiv <andraprs@xxxxxxxxxx>
> Reviewed-by: Bjoern Doebel <doebel@xxxxxxxxx>
> Reviewed-by: Norbert Manthey <nmanthey@xxxxxxxxx>

This patch looks OK, but I would want to wait until the Xen hypervisor
one gets the test-cases+documentation changes..

> ---
>  livepatch-build | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/livepatch-build b/livepatch-build
> index c057fa1..0938b3a 100755
> --- a/livepatch-build
> +++ b/livepatch-build
> @@ -30,6 +30,7 @@ DEBUG=n
>  XEN_DEBUG=n
>  SKIP=
>  DEPENDS=
> +XEN_DEPENDS=
>  PRELINK=
>  XENSYMS=xen-syms
>  
> @@ -157,6 +158,9 @@ function create_patch()
>      # Create a dependency section
>      perl -e "print pack 'VVVZ*H*', 4, 20, 3, 'GNU', '${DEPENDS}'" > 
> depends.bin
>  
> +    # Create a Xen dependency section
> +    perl -e "print pack 'VVVZ*H*', 4, 20, 3, 'GNU', '${XEN_DEPENDS}'" > 
> xen_depends.bin
> +
>      echo "Creating patch module..."
>      if [ -z "$PRELINK" ]; then
>          ld -r -o "${PATCHNAME}.livepatch" --build-id=sha1 $(find output 
> -type f -name "*.o") || die
> @@ -168,6 +172,9 @@ function create_patch()
>  
>      objcopy --add-section .livepatch.depends=depends.bin 
> "${PATCHNAME}.livepatch"
>      objcopy --set-section-flags .livepatch.depends=alloc,readonly 
> "${PATCHNAME}.livepatch"
> +
> +    objcopy --add-section .livepatch.xen_depends=xen_depends.bin 
> "${PATCHNAME}.livepatch"
> +    objcopy --set-section-flags .livepatch.xen_depends=alloc,readonly 
> "${PATCHNAME}.livepatch"
>  }
>  
>  usage() {
> @@ -183,12 +190,13 @@ usage() {
>      echo "        --xen-debug        Build debug Xen (if your .config does 
> not have the options)" >&2
>      echo "        --xen-syms         Build against a xen-syms" >&2
>      echo "        --depends          Required build-id" >&2
> +    echo "        --xen-depends      Required Xen build-id" >&2
>      echo "        --prelink          Prelink" >&2
>  }
>  
>  find_tools || die "can't find supporting tools"
>  
> -options=$(getopt -o hs:p:c:o:j:k:d -l 
> "help,srcdir:,patch:,config:,output:,cpus:,skip:,debug,xen-debug,xen-syms:,depends:,prelink"
>  -- "$@") || die "getopt failed"
> +options=$(getopt -o hs:p:c:o:j:k:d -l 
> "help,srcdir:,patch:,config:,output:,cpus:,skip:,debug,xen-debug,xen-syms:,depends:,xen-depends:,prelink"
>  -- "$@") || die "getopt failed"
>  
>  eval set -- "$options"
>  
> @@ -247,6 +255,11 @@ while [[ $# -gt 0 ]]; do
>              DEPENDS="$1"
>              shift
>              ;;
> +        --xen-depends)
> +            shift
> +            XEN_DEPENDS="$1"
> +            shift
> +            ;;
>          --prelink)
>              PRELINK=--resolve
>              shift
> @@ -263,6 +276,7 @@ done
>  [ -z "$configarg" ] && die ".config not given"
>  [ -z "$outputarg" ] && die "Output directory not given"
>  [ -z "$DEPENDS" ] && die "Build-id dependency not given"
> +[ -z "$XEN_DEPENDS" ] && die "Xen Build-id dependency not given"
>  
>  SRCDIR="$(readlink -m -- "$srcarg")"
>  PATCHFILE="$(readlink -m -- "$patcharg")"
> -- 
> 2.16.5
> 
> 
> 
> 
> Amazon Development Center Germany GmbH
> Krausenstr. 38
> 10117 Berlin
> Geschaeftsfuehrer: Christian Schlaeger, Ralf Herbrich
> Ust-ID: DE 289 237 879
> Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
> 
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.