Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1
xen
559bdde5-pull-in-latest-linux-earlycpio.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 559bdde5-pull-in-latest-linux-earlycpio.patch of Package xen
# Commit 39c6664a0e6e1b4ed80660d545dff34ce41bee31 # Date 2015-07-07 15:10:45 +0100 # Author Ian Campbell <ian.campbell@citrix.com> # Committer Ian Campbell <ian.campbell@citrix.com> xen: earlycpio: Pull in latest linux earlycpio.[ch] AFAICT our current version does not correspond to any version in the Linux history. This commit resynchronised to the state in Linux commit 598bae70c2a8e35c8d39b610cca2b32afcf047af. Differences from upstream: find_cpio_data is __init, printk instead of pr_*. This appears to fix Debian bug #785187. "Appears" because my test box happens to be AMD and the issue is that the (valid) cpio generated by the Intel ucode is not liked by the old Xen code. I've tested by hacking the hypervisor to look for the Intel path. Reported-by: Stephan Seitz <stse+debianbugs@fsing.rootsland.net> Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Jan Beulich <jbeulich@suse.com> Cc: Stephan Seitz <stse+debianbugs@fsing.rootsland.net> Cc: 785187@bugs.debian.org Acked-by: Jan Beulich <jbeulich@suse.com> --- a/xen/common/earlycpio.c +++ b/xen/common/earlycpio.c @@ -54,25 +54,26 @@ enum cpio_fields { /** * cpio_data find_cpio_data - Search for files in an uncompressed cpio - * @path: The directory to search for, including a slash at the end - * @data: Pointer to the the cpio archive or a header inside - * @len: Remaining length of the cpio based on data pointer - * @offset: When a matching file is found, this is the offset to the - * beginning of the cpio. It can be used to iterate through - * the cpio to find all files inside of a directory path + * @path: The directory to search for, including a slash at the end + * @data: Pointer to the the cpio archive or a header inside + * @len: Remaining length of the cpio based on data pointer + * @nextoff: When a matching file is found, this is the offset from the + * beginning of the cpio to the beginning of the next file, not the + * matching file itself. It can be used to iterate through the cpio + * to find all files inside of a directory path. * - * @return: struct cpio_data containing the address, length and - * filename (with the directory path cut off) of the found file. - * If you search for a filename and not for files in a directory, - * pass the absolute path of the filename in the cpio and make sure - * the match returned an empty filename string. + * @return: struct cpio_data containing the address, length and + * filename (with the directory path cut off) of the found file. + * If you search for a filename and not for files in a directory, + * pass the absolute path of the filename in the cpio and make sure + * the match returned an empty filename string. */ struct cpio_data __init find_cpio_data(const char *path, void *data, - size_t len, long *offset) + size_t len, long *nextoff) { const size_t cpio_header_len = 8*C_NFIELDS - 2; - struct cpio_data cd = { NULL, 0 }; + struct cpio_data cd = { NULL, 0, "" }; const char *p, *dptr, *nptr; unsigned int ch[C_NFIELDS], *chp, v; unsigned char c, x; @@ -129,17 +130,17 @@ struct cpio_data __init find_cpio_data(c if ((ch[C_MODE] & 0170000) == 0100000 && ch[C_NAMESIZE] >= mypathsize && !memcmp(p, path, mypathsize)) { - *offset = (long)nptr - (long)data; + *nextoff = (long)nptr - (long)data; if (ch[C_NAMESIZE] - mypathsize >= MAX_CPIO_FILE_NAME) { printk( "File %s exceeding MAX_CPIO_FILE_NAME [%d]\n", p, MAX_CPIO_FILE_NAME); } - if (ch[C_NAMESIZE] - 1 /* includes \0 */ == mypathsize) { - cd.data = (void *)dptr; - cd.size = ch[C_FILESIZE]; - return cd; /* Found it! */ - } + strlcpy(cd.name, p + mypathsize, MAX_CPIO_FILE_NAME); + + cd.data = (void *)dptr; + cd.size = ch[C_FILESIZE]; + return cd; /* Found it! */ } len -= (nptr - p); p = nptr; --- a/xen/include/xen/earlycpio.h +++ b/xen/include/xen/earlycpio.h @@ -6,6 +6,7 @@ struct cpio_data { void *data; size_t size; + char name[MAX_CPIO_FILE_NAME]; }; struct cpio_data find_cpio_data(const char *path, void *data, size_t len,
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