[gnome-continuous-yocto/gnomeostree-3.22-krogoth: 124/246] rpm: prevent race in tempdir creation



commit 6962ee368906e096cf2df3031ca5142117e7c52a
Author: Markus Lehtonen <markus lehtonen linux intel com>
Date:   Fri Oct 14 13:41:26 2016 +0300

    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)
    
    (From OE-Core rev: 1ae228ee5181f12955356c1fe10d341373dd5fcc)
    
    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>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 ...more-verbose-error-logging-in-rpmTempFile.patch |   26 +-----------
 .../rpmdb-prevent-race-in-tmpdir-creation.patch    |   41 ++++++++++++++++++++
 meta/recipes-devtools/rpm/rpm_5.4.16.bb            |    1 +
 3 files changed, 44 insertions(+), 24 deletions(-)
---
diff --git a/meta/recipes-devtools/rpm/rpm/rpmdb-more-verbose-error-logging-in-rpmTempFile.patch 
b/meta/recipes-devtools/rpm/rpm/rpmdb-more-verbose-error-logging-in-rpmTempFile.patch
index 809e54e..3a6f874 100644
--- a/meta/recipes-devtools/rpm/rpm/rpmdb-more-verbose-error-logging-in-rpmTempFile.patch
+++ b/meta/recipes-devtools/rpm/rpm/rpmdb-more-verbose-error-logging-in-rpmTempFile.patch
@@ -5,32 +5,10 @@ Upstream-Status: Inappropriate [debugging]
 Signed-off-by: Markus Lehtonen <markus lehtonen linux intel com>
 
 diff --git a/rpmdb/signature.c b/rpmdb/signature.c
-index dce6c4e..a1d0f06 100644
+index 100204b..e56ab3d 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) {
-+            rpmlog(RPMLOG_ERR, _("error creating temporary directory %s: %d\n"), tempfn, ret);
-+            goto errxit;
-+        }
-     }
- 
-     /* XXX should probably use mkstemp here */
-@@ -68,12 +72,16 @@ int rpmTempFile(const char * prefix, const char ** fnptr, void * fdptr)
+@@ -72,12 +72,16 @@ int rpmTempFile(const char * prefix, const char ** fnptr, void * fdptr)
  #endif
  
        temput = urlPath(tempfn, &tfn);
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 0000000..f483f3a
--- /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
+
diff --git a/meta/recipes-devtools/rpm/rpm_5.4.16.bb b/meta/recipes-devtools/rpm/rpm_5.4.16.bb
index 71ebace..eb2d4f9 100644
--- a/meta/recipes-devtools/rpm/rpm_5.4.16.bb
+++ b/meta/recipes-devtools/rpm/rpm_5.4.16.bb
@@ -154,6 +154,7 @@ SRC_URI += " \
           file://rpm-rpmdb-grammar.patch \
           file://rpm-disable-blaketest.patch \
           file://rpm-autogen-force.patch \
+          file://rpmdb-prevent-race-in-tmpdir-creation.patch \
           file://rpmdb-more-verbose-error-logging-in-rpmTempFile.patch \
 "
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]