summaryrefslogtreecommitdiff
path: root/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2016-10-14 13:41:26 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-11-08 23:03:17 +0000
commit1ae228ee5181f12955356c1fe10d341373dd5fcc (patch)
tree5db6ce9ea71bbbebcf9b8cfb0cc67aeac4d18b9e /meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch
parente299ac7d5b1e7af7940766e1232f6e425029fab6 (diff)
downloadopenembedded-core-1ae228ee5181f12955356c1fe10d341373dd5fcc.tar.gz
openembedded-core-1ae228ee5181f12955356c1fe10d341373dd5fcc.tar.bz2
openembedded-core-1ae228ee5181f12955356c1fe10d341373dd5fcc.zip
rpm: prevent race in tempdir creation
This patch fixes an extramely rare race condition in creation of rpmdb temporary directory. The "rpmdb-more-verbose-error-logging" patch is still left in place, just for the case. [YOCTO #9416] (From OE-Core rev: 84de3283fa2a2908d367eb58953903ae685b0298) Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> Signed-off-by: Armin Kuster <akuster808@gmail.com>
Diffstat (limited to 'meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch')
-rw-r--r--meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch b/meta/recipes-devtools/rpm/rpm/rpmdb-prevent-race-in-tmpdir-creation.patch
new file mode 100644
index 0000000000..f483f3ad90
--- /dev/null
+++ b/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
+