From: Ranjitsinh Rathod <ranjitsinh.rat...@kpit.com>

Change in 2 patch as below to avoid critical issues
1) 0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
Handled return values of getrlimit() and lzma_cputhreads() functions
to avoid unexpected behaviours like devide by zero and potential read
of uninitialized variable 'virtual_memory'
Upstream-Status: Pending [merge of multithreading patches to upstream]

2) CVE-2021-3421.patch
Removed RPMSIGTAG_FILESIGNATURES and RPMSIGTAG_FILESIGNATURELENGTH as
it is not needed during backporting of original patch.
Upstream-Status: Backport 
[https://github.com/rpm-software-management/rpm/commit/d6a86b5e69e46cc283b1e06c92343319beb42e21]

Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rat...@kpit.com>
---
 ...rict-virtual-memory-usage-if-limit-s.patch | 25 ++++++++-------
 .../rpm/files/CVE-2021-3421.patch             | 32 +++----------------
 2 files changed, 19 insertions(+), 38 deletions(-)

diff --git 
a/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
 
b/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
index 6454785254..dc3f74fecd 100644
--- 
a/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
+++ 
b/meta/recipes-devtools/rpm/files/0001-rpm-rpmio.c-restrict-virtual-memory-usage-if-limit-s.patch
@@ -11,36 +11,39 @@ CPU thread.
 Upstream-Status: Pending [merge of multithreading patches to upstream]
 
 Signed-off-by: Peter Bergin <pe...@berginkonsult.se>
+Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rat...@kpit.com>
 ---
- rpmio/rpmio.c | 34 ++++++++++++++++++++++++++++++++++
- 1 file changed, 34 insertions(+)
+ rpmio/rpmio.c | 36 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
 
 diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
 index e051c98..b3c56b6 100644
 --- a/rpmio/rpmio.c
 +++ b/rpmio/rpmio.c
-@@ -845,6 +845,40 @@ static LZFILE *lzopen_internal(const char *mode, int fd, 
int xz)
+@@ -845,6 +845,42 @@ static LZFILE *lzopen_internal(const char *mode, int fd, 
int xz)
                }
  #endif
  
-+              struct rlimit virtual_memory;
-+              getrlimit(RLIMIT_AS, &virtual_memory);
-+              if (virtual_memory.rlim_cur != RLIM_INFINITY) {
++              struct rlimit virtual_memory = {RLIM_INFINITY , RLIM_INFINITY};
++              int status = getrlimit(RLIMIT_AS, &virtual_memory);
++              if ((status != -1) && (virtual_memory.rlim_cur != 
RLIM_INFINITY)) {
 +                      const uint64_t virtual_memlimit = 
virtual_memory.rlim_cur;
++                      uint32_t threads_max = lzma_cputhreads();
 +                      const uint64_t virtual_memlimit_per_cpu_thread =
-+                              virtual_memlimit / lzma_cputhreads();
-+                      uint64_t memory_usage_virt;
++                              virtual_memlimit / ((threads_max == 0) ? 1 : 
threads_max);
 +                      rpmlog(RPMLOG_NOTICE, "XZ: virtual memory restricted to 
%lu and "
 +                             "per CPU thread %lu\n", virtual_memlimit, 
virtual_memlimit_per_cpu_thread);
++                      uint64_t memory_usage_virt;
 +                      /* keep reducing the number of compression threads 
until memory
 +                         usage falls below the limit per CPU thread*/
 +                      while ((memory_usage_virt = 
lzma_stream_encoder_mt_memusage(&mt_options)) >
 +                             virtual_memlimit_per_cpu_thread) {
-+                              /* If number of threads goes down to zero 
lzma_stream_encoder will
-+                               * will return UINT64_MAX. We must check here 
to avoid an infinite loop.
++                              /* If number of threads goes down to zero or in 
case of any other error
++                               * lzma_stream_encoder_mt_memusage will return 
UINT64_MAX. We must check
++                               * for both the cases here to avoid an infinite 
loop.
 +                               * If we get into situation that one thread 
requires more virtual memory
 +                               * than available we set one thread, print 
error message and try anyway. */
-+                              if (--mt_options.threads == 0) {
++                              if ((--mt_options.threads == 0) || 
(memory_usage_virt == UINT64_MAX)) {
 +                                      mt_options.threads = 1;
 +                                      rpmlog(RPMLOG_WARNING,
 +                                             "XZ: Could not adjust number of 
threads to get below "
diff --git a/meta/recipes-devtools/rpm/files/CVE-2021-3421.patch 
b/meta/recipes-devtools/rpm/files/CVE-2021-3421.patch
index b1a05b6863..d2ad5eabac 100644
--- a/meta/recipes-devtools/rpm/files/CVE-2021-3421.patch
+++ b/meta/recipes-devtools/rpm/files/CVE-2021-3421.patch
@@ -22,16 +22,16 @@ Fixes: CVE-2021-3421, CVE-2021-20271
 Upstream-Status: Backport 
[https://github.com/rpm-software-management/rpm/commit/d6a86b5e69e46cc283b1e06c92343319beb42e21]
 CVE: CVE-2021-3421
 Signed-off-by: Minjae Kim <flower...@gmail.com>
+Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rat...@kpit.com>
 ---
- lib/package.c | 115 ++++++++++++++++++++++++--------------------------
- lib/rpmtag.h  |   4 ++
- 2 files changed, 58 insertions(+), 61 deletions(-)
+ lib/package.c | 113 ++++++++++++++++++++++++--------------------------
+ 1 file changed, 52 insertions(+), 61 deletions(-)
 
 diff --git a/lib/package.c b/lib/package.c
 index 081123d84e..7c26ea323f 100644
 --- a/lib/package.c
 +++ b/lib/package.c
-@@ -20,76 +20,68 @@
+@@ -20,76 +20,67 @@
  
  #include "debug.h"
  
@@ -46,8 +46,6 @@ index 081123d84e..7c26ea323f 100644
 +    { RPMSIGTAG_GPG, RPMTAG_SIGGPG, 0 },
 +    /* { RPMSIGTAG_PGP5, RPMTAG_SIGPGP5, 0 }, */ /* long obsolete, dont use */
 +    { RPMSIGTAG_PAYLOADSIZE, RPMTAG_ARCHIVESIZE, 1 },
-+    { RPMSIGTAG_FILESIGNATURES, RPMTAG_FILESIGNATURES, 0 },
-+    { RPMSIGTAG_FILESIGNATURELENGTH, RPMTAG_FILESIGNATURELENGTH, 1 },
 +    { RPMSIGTAG_SHA1, RPMTAG_SHA1HEADER, 1 },
 +    { RPMSIGTAG_SHA256, RPMTAG_SHA256HEADER, 1 },
 +    { RPMSIGTAG_DSA, RPMTAG_DSAHEADER, 0 },
@@ -61,6 +59,7 @@ index 081123d84e..7c26ea323f 100644
   * Translate and merge legacy signature tags into header.
   * @param h           header (dest)
   * @param sigh                signature header (src)
++ * @return            failing tag number, 0 on success
   */
  static
 -void headerMergeLegacySigs(Header h, Header sigh)
@@ -170,27 +169,6 @@ index 081123d84e..7c26ea323f 100644
            applyRetrofits(h);
  
            /* Bump reference count for return. */
-diff --git a/lib/rpmtag.h b/lib/rpmtag.h
-index 8c718b31b5..d562572c6f 100644
---- a/lib/rpmtag.h
-+++ b/lib/rpmtag.h
-@@ -65,6 +65,8 @@ typedef enum rpmTag_e {
-     RPMTAG_LONGARCHIVESIZE    = RPMTAG_SIG_BASE+15,   /* l */
-     /* RPMTAG_SIG_BASE+16 reserved */
-     RPMTAG_SHA256HEADER               = RPMTAG_SIG_BASE+17,   /* s */
-+    /* RPMTAG_SIG_BASE+18 reserved for RPMSIGTAG_FILESIGNATURES */
-+    /* RPMTAG_SIG_BASE+19 reserved for RPMSIGTAG_FILESIGNATURELENGTH */
- 
-     RPMTAG_NAME               = 1000, /* s */
- #define       RPMTAG_N        RPMTAG_NAME     /* s */
-@@ -422,6 +424,8 @@ typedef enum rpmSigTag_e {
-     RPMSIGTAG_LONGSIZE        = RPMTAG_LONGSIGSIZE,   /*!< internal 
Header+Payload size (64bit) in bytes. */
-     RPMSIGTAG_LONGARCHIVESIZE = RPMTAG_LONGARCHIVESIZE, /*!< internal 
uncompressed payload size (64bit) in bytes. */
-     RPMSIGTAG_SHA256  = RPMTAG_SHA256HEADER,
-+    RPMSIGTAG_FILESIGNATURES            = RPMTAG_SIG_BASE + 18,
-+    RPMSIGTAG_FILESIGNATURELENGTH       = RPMTAG_SIG_BASE + 19,
- } rpmSigTag;
- 
  
 -- 
 2.17.1
-- 
2.17.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#155794): 
https://lists.openembedded.org/g/openembedded-core/message/155794
Mute This Topic: https://lists.openembedded.org/mt/85459532/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to