diff options
Diffstat (limited to 'import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch')
-rw-r--r-- | import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch b/import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch new file mode 100644 index 000000000..f483f3ad9 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch @@ -0,0 +1,41 @@ +rpmdb: prevent race in tmpdir creation + +If two (or more) instances of rpm are running at the same time they may +be trying to create the same (base-)temporary directory at the same time +which causes the other mkdir to fail with EEXIST. This patch prevents a +failure caused by this race by ignoring EEXIST error on directory +creation. + +Upstream-Status: Pending + +Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com> + +diff --git a/rpmdb/signature.c b/rpmdb/signature.c +index dce6c4e..100204b 100644 +--- a/rpmdb/signature.c ++++ b/rpmdb/signature.c +@@ -37,6 +37,7 @@ int rpmTempFile(const char * prefix, const char ** fnptr, void * fdptr) + int temput; + FD_t fd = NULL; + unsigned int ran; ++ int ret = 0; + + if (!prefix) prefix = ""; + +@@ -44,8 +45,11 @@ int rpmTempFile(const char * prefix, const char ** fnptr, void * fdptr) + if (!_initialized) { + _initialized = 1; + tempfn = rpmGenPath(prefix, tpmacro, NULL); +- if (rpmioMkpath(tempfn, 0755, (uid_t) -1, (gid_t) -1)) +- goto errxit; ++ ret = rpmioMkpath(tempfn, 0755, (uid_t) -1, (gid_t) -1); ++ if (ret && ret != EEXIST) { ++ rpmlog(RPMLOG_ERR, _("error creating temporary directory %s: %d\n"), tempfn, ret); ++ goto errxit; ++ } + } + + /* XXX should probably use mkstemp here */ +-- +2.6.6 + |