Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
xen.7653
libxc-suppress-ramdisk-unzip.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libxc-suppress-ramdisk-unzip.patch of Package xen.7653
Index: xen-4.5.5-testing/tools/libxc/include/xc_dom.h =================================================================== --- xen-4.5.5-testing.orig/tools/libxc/include/xc_dom.h +++ xen-4.5.5-testing/tools/libxc/include/xc_dom.h @@ -236,7 +236,6 @@ int xc_dom_mem_init(struct xc_dom_image int xc_dom_kernel_check_size(struct xc_dom_image *dom, size_t sz); int xc_dom_kernel_max_size(struct xc_dom_image *dom, size_t sz); -int xc_dom_ramdisk_check_size(struct xc_dom_image *dom, size_t sz); int xc_dom_ramdisk_max_size(struct xc_dom_image *dom, size_t sz); int xc_dom_devicetree_max_size(struct xc_dom_image *dom, size_t sz); Index: xen-4.5.5-testing/tools/libxc/xc_dom_core.c =================================================================== --- xen-4.5.5-testing.orig/tools/libxc/xc_dom_core.c +++ xen-4.5.5-testing/tools/libxc/xc_dom_core.c @@ -314,7 +314,8 @@ int xc_dom_kernel_check_size(struct xc_d return 0; } -int xc_dom_ramdisk_check_size(struct xc_dom_image *dom, size_t sz) +static int xc_dom_ramdisk_check_size(struct xc_dom_image *dom, size_t sz, + size_t raw) { /* No limit */ if ( !dom->max_ramdisk_size ) @@ -322,8 +323,9 @@ int xc_dom_ramdisk_check_size(struct xc_ if ( sz > dom->max_ramdisk_size ) { - xc_dom_panic(dom->xch, XC_INVALID_KERNEL, - "ramdisk image too large"); + if ( raw > dom->max_ramdisk_size ) + xc_dom_panic(dom->xch, XC_INVALID_KERNEL, + "ramdisk image too large"); return 1; } @@ -992,13 +994,13 @@ int xc_dom_build_image(struct xc_dom_ima { unziplen = xc_dom_check_gzip(dom->xch, dom->ramdisk_blob, dom->ramdisk_size); - if ( xc_dom_ramdisk_check_size(dom, unziplen) != 0 ) + if ( xc_dom_ramdisk_check_size(dom, unziplen, dom->ramdisk_size) != 0 ) unziplen = 0; } else unziplen = 0; - ramdisklen = unziplen ? unziplen : dom->ramdisk_size; + ramdisklen = max(unziplen, dom->ramdisk_size); if ( xc_dom_alloc_segment(dom, &dom->ramdisk_seg, "ramdisk", dom->ramdisk_seg.vstart, @@ -1011,15 +1013,15 @@ int xc_dom_build_image(struct xc_dom_ima __FUNCTION__); goto err; } - if ( unziplen ) + if ( !unziplen || + xc_dom_do_gunzip(dom->xch, dom->ramdisk_blob, dom->ramdisk_size, + ramdiskmap, unziplen) == -1 ) { - if ( xc_dom_do_gunzip(dom->xch, - dom->ramdisk_blob, dom->ramdisk_size, - ramdiskmap, ramdisklen) == -1 ) - goto err; - } - else memcpy(ramdiskmap, dom->ramdisk_blob, dom->ramdisk_size); + if ( unziplen > dom->ramdisk_size ) + memset(ramdiskmap + dom->ramdisk_size, 0, + unziplen - dom->ramdisk_size); + } } /* load devicetree */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor