Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-4.5
xen
xen.c2a17869d5dcd845d646bf4db122cad73596a2be.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xen.c2a17869d5dcd845d646bf4db122cad73596a2be.patch of Package xen
From: Chris Patterson <pattersonc@ainfosec.com> Date: Fri, 3 Jun 2016 12:50:10 -0400 Subject: c2a17869d5dcd845d646bf4db122cad73596a2be libfsimage: replace deprecated readdir_r() with readdir() Replace the usage of readdir_r() with readdir() to address a compilation error under glibc due to the deprecation of readdir_r for their next release (2.24) [1, 2]. Add new error checking on readdir(), and fail if error occurs. -- From the GNU libc manual [3]: " It is expected that future versions of POSIX will obsolete readdir_r and mandate the level of thread safety for readdir which is provided by the GNU C Library and other implementations today. " There is a filed bug in the Austin Group Defect Tracker [4] in which 'dalias' proposes (in comment 0001632) that: " I would like to propose an alternate solution. For readdir, replace the text: "The readdir() function need not be thread-safe." with: "If multiple threads call the readdir() function with the same directory stream argument and without synchronization to preclude simultaneous access, then the behavior is undefined." With this change, the clunky readdir_r function is no longer needed or useful, and should probably be deprecated. As the only reasonable way to meet the implementation requirements for readdir is to have the dirent buffer in the DIR structure, this change should not require any change to existing implementations. " [1] https://sourceware.org/ml/libc-alpha/2016-02/msg00093.html [2] https://sourceware.org/bugzilla/show_bug.cgi?id=19056 [3] https://www.gnu.org/software/libc/manual/html_node/Reading_002fClosing-Directory.html [4] http://austingroupbugs.net/view.php?id=696 Signed-off-by: Chris Patterson <pattersonc@ainfosec.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Release-acked-by: Wei Liu <wei.liu2@citrix.com> --- tools/libfsimage/common/fsimage_plugin.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) --- a/tools/libfsimage/common/fsimage_plugin.c +++ b/tools/libfsimage/common/fsimage_plugin.c @@ -114,56 +114,59 @@ static int init_plugin(const char *lib) return (0); fail: (void) dlclose(fp->fp_dlh); free(fp); return (-1); } static int load_plugins(void) { const char *fsdir = getenv("FSIMAGE_FSDIR"); struct dirent *dp = NULL; - struct dirent *dpp; DIR *dir = NULL; char *tmp = NULL; size_t name_max; int err; int ret = -1; if (fsdir == NULL) fsdir = FSIMAGE_FSDIR; if ((name_max = pathconf(fsdir, _PC_NAME_MAX)) == -1) goto fail; if ((tmp = malloc(name_max + 1)) == NULL) goto fail; - if ((dp = malloc(sizeof (struct dirent) + name_max + 1)) == NULL) - goto fail; - if ((dir = opendir(fsdir)) == NULL) goto fail; - bzero(dp, sizeof (struct dirent) + name_max + 1); + for (;;) { + errno = 0; + dp = readdir(dir); + + if (dp == NULL && errno != 0) + goto fail; + + if (dp == NULL) + break; - while (readdir_r(dir, dp, &dpp) == 0 && dpp != NULL) { - if (strcmp(dpp->d_name, ".") == 0) + if (strcmp(dp->d_name, ".") == 0) continue; - if (strcmp(dpp->d_name, "..") == 0) + if (strcmp(dp->d_name, "..") == 0) continue; (void) snprintf(tmp, name_max, "%s/%s/fsimage.so", fsdir, - dpp->d_name); + dp->d_name); if (init_plugin(tmp) != 0) goto fail; } ret = 0; fail: err = errno; if (dir != NULL) (void) closedir(dir); free(tmp);
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