[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] check read/write return values
The Fedora build system is in paranoid mode, and compiles everything with -Werror. Additionally, it checks that the return values of calls like read and write are checked. The build exits with errors like: xen/lowlevel/xc/xc.c: In function `pyxc_vmx_build': xen/lowlevel/xc/xc.c:464: warning: ignoring return value of `sscanf', declared with attribute warn_unused_result xen/lowlevel/xc/xc.c:465: warning: ignoring return value of `sscanf', declared with attribute warn_unused_result error: command 'gcc' failed with exit status 1 This (trivial) patch, against yesterday's unstable snapshot, adds these checks for a number of functions. The obvious exception is the dumpit function, which isn't called by anybody anyway. I have verified that Xen still boots and can create Linux domains with these changes applied. I tried to stick to the various coding styles in the different files. Signed-off-by: Rik van Riel <riel@xxxxxxxxxx> --- xen-unstable/tools/libxc/xc_plan9_build.c.warn 2005-02-19 11:58:24.000000000 -0500 +++ xen-unstable/tools/libxc/xc_plan9_build.c 2005-02-19 12:02:41.000000000 -0500 @@ -63,6 +63,7 @@ * your image builder. * Xen guys, nuke this if you wish. */ +#if 0 /* NOT CALLED */ void dumpit(int xc_handle, u32 dom, int start_page, int tot, unsigned long *page_array) @@ -85,6 +86,7 @@ munmap(vaddr, PAGE_SIZE); } } +#endif int blah(char *b) { --- xen-unstable/tools/libxc/xc_private.c.warn2 2005-02-19 12:12:44.000000000 -0500 +++ xen-unstable/tools/libxc/xc_private.c 2005-02-19 12:14:44.000000000 -0500 @@ -276,12 +276,14 @@ unsigned long sz; lseek(fd, 0, SEEK_SET); - read(fd, &sig, sizeof(sig)); + if ( read(fd, &sig, sizeof(sig)) != sizeof(sig) ) + return 0; sz = lseek(fd, 0, SEEK_END); if ( sig == 0x8b1f ) /* GZIP signature? */ { lseek(fd, -4, SEEK_END); - read(fd, &_sz, 4); + if ( read(fd, &_sz, 4) != 4 ) + return 0; sz = _sz; } lseek(fd, 0, SEEK_SET); @@ -304,6 +306,12 @@ *size = xc_get_filesz(kernel_fd); + if ( *size == 0 ) + { + PERROR("Could not read kernel image"); + goto out; + } + if ( (kernel_gfd = gzdopen(kernel_fd, "rb")) == NULL ) { PERROR("Could not allocate decompression state for state file"); --- xen-unstable/tools/xentrace/xentrace.c.warn 2005-02-19 12:31:19.994379665 -0500 +++ xen-unstable/tools/xentrace/xentrace.c 2005-02-19 12:37:11.425091593 -0500 @@ -77,8 +77,14 @@ struct timespec millis_to_timespec(unsig */ void write_rec(unsigned int cpu, struct t_rec *rec, FILE *out) { - fwrite(&cpu, sizeof(cpu), 1, out); - fwrite(rec, sizeof(*rec), 1, out); + size_t written = 0; + written += fwrite(&cpu, sizeof(cpu), 1, out); + written += fwrite(rec, sizeof(*rec), 1, out); + if ( written != 2 ) + { + PERROR("Failure to write trace record"); + exit(EXIT_FAILURE); + } } /** --- xen-unstable/tools/python/xen/lowlevel/xc/xc.c.warn 2005-02-19 13:10:45.558410335 -0500 +++ xen-unstable/tools/python/xen/lowlevel/xc/xc.c 2005-02-19 14:21:19.323167162 -0500 @@ -461,8 +461,10 @@ static PyObject *pyxc_vmx_build(PyObject sf2 = PyString_AsString(f2); lf3 = PyLong_AsLong(f3); lf4 = PyLong_AsLong(f4); - sscanf(sf1, "%lx", &lf1); - sscanf(sf2, "%lx", &lf2); + if (sscanf(sf1, "%lx", &lf1) != 1) + return NULL; + if (sscanf(sf2, "%lx", &lf2) != 1) + return NULL; mem_map.map[i-1].addr = lf1; mem_map.map[i-1].size = lf2 - lf1; ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |