backport patches from upstream
This commit is contained in:
parent
a9164423a2
commit
49ad7182f3
@ -0,0 +1,26 @@
|
||||
From 213a4064a4b1b5b260a55b3933170599e617494d Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Tue, 1 Sep 2020 12:15:33 +0300
|
||||
Subject: [PATCH] Add missing terminator to copyTagsFromMainDebug array
|
||||
|
||||
headerCopyTags() expects a 0-terminated array, this was overflowing
|
||||
(spotted by address-sanitizer)
|
||||
---
|
||||
build/files.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/build/files.c b/build/files.c
|
||||
index f06f9ac74..47625905c 100644
|
||||
--- a/build/files.c
|
||||
+++ b/build/files.c
|
||||
@@ -2838,6 +2838,7 @@ static rpmTag copyTagsFromMainDebug[] = {
|
||||
RPMTAG_OS,
|
||||
RPMTAG_PLATFORM,
|
||||
RPMTAG_OPTFLAGS,
|
||||
+ 0
|
||||
};
|
||||
|
||||
/* this is a hack: patch the summary and the description to include
|
||||
--
|
||||
2.27.0
|
||||
|
||||
32
backport-Always-close-libelf-handle-1313.patch
Normal file
32
backport-Always-close-libelf-handle-1313.patch
Normal file
@ -0,0 +1,32 @@
|
||||
From 38c03ddb18e86c84d89af695f72442d8365eb64e Mon Sep 17 00:00:00 2001
|
||||
From: Florian Festi <ffesti@redhat.com>
|
||||
Date: Tue, 21 Jul 2020 10:45:20 +0200
|
||||
Subject: [PATCH] Always close libelf handle (#1313)
|
||||
|
||||
Otherwise executables that are not proper elf files are leaking libelf
|
||||
handles. This results in file being left open (mmap'ed) and fails the
|
||||
build on NFS as those files can't be deleted properly there.
|
||||
|
||||
Resolves: rhbz#1840728
|
||||
See also: https://bugzilla.redhat.com/show_bug.cgi?id=1840728
|
||||
---
|
||||
build/files.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/build/files.c b/build/files.c
|
||||
index f675306f7..62489c07c 100644
|
||||
--- a/build/files.c
|
||||
+++ b/build/files.c
|
||||
@@ -1935,8 +1935,8 @@ static int generateBuildIDs(FileList fl, ARGV_t *files)
|
||||
if (terminate)
|
||||
rc = 1;
|
||||
}
|
||||
- elf_end (elf);
|
||||
}
|
||||
+ elf_end (elf);
|
||||
close (fd);
|
||||
}
|
||||
}
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
From a4afbb62c94c6e0dc18c1bf08336aeb4a91f82de Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Wed, 22 Apr 2020 14:12:47 +0300
|
||||
Subject: [PATCH] Don't look into source package provides in depsolving
|
||||
|
||||
Fixes regressions from commit 75ec16e660e784d7897b37cac1a2b9b135825f25:
|
||||
the newly added provides of to-be-built packages were being used for
|
||||
dependency resolution, such as spec satifying its own buildrequires,
|
||||
and matched against conflicts in installed packages.
|
||||
|
||||
Source packages cannot obsolete anything or provide capabilities or files
|
||||
to transactions, don't add them to rpmal at all. Explicitly skip checks
|
||||
against source provides, similarly to what we already did with obsoletes.
|
||||
|
||||
Fixes: #1189
|
||||
---
|
||||
lib/depends.c | 8 ++++----
|
||||
lib/rpmal.c | 4 ++++
|
||||
2 files changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/depends.c b/lib/depends.c
|
||||
index 6acb21dc3..579451926 100644
|
||||
--- a/lib/depends.c
|
||||
+++ b/lib/depends.c
|
||||
@@ -1040,6 +1040,10 @@ int rpmtsCheck(rpmts ts)
|
||||
checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_OBSOLETENAME),
|
||||
tscolor);
|
||||
|
||||
+ /* Skip obsoletion and provides checks for source packages (ie build) */
|
||||
+ if (rpmteIsSource(p))
|
||||
+ continue;
|
||||
+
|
||||
/* Check provides against conflicts in installed packages. */
|
||||
while (rpmdsNext(provides) >= 0) {
|
||||
checkInstDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, NULL, provides, 0);
|
||||
@@ -1047,10 +1051,6 @@ int rpmtsCheck(rpmts ts)
|
||||
checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, NULL, provides, 1);
|
||||
}
|
||||
|
||||
- /* Skip obsoletion checks for source packages (ie build) */
|
||||
- if (rpmteIsSource(p))
|
||||
- continue;
|
||||
-
|
||||
/* Check package name (not provides!) against installed obsoletes */
|
||||
checkInstDeps(ts, dcache, p, RPMTAG_OBSOLETENAME, NULL, rpmteDS(p, RPMTAG_NAME), 0);
|
||||
|
||||
diff --git a/lib/rpmal.c b/lib/rpmal.c
|
||||
index 3c8acd63a..8a47d025a 100644
|
||||
--- a/lib/rpmal.c
|
||||
+++ b/lib/rpmal.c
|
||||
@@ -247,6 +247,10 @@ void rpmalAdd(rpmal al, rpmte p)
|
||||
rpmalNum pkgNum;
|
||||
availablePackage alp;
|
||||
|
||||
+ /* Source packages don't provide anything to depsolving */
|
||||
+ if (rpmteIsSource(p))
|
||||
+ return;
|
||||
+
|
||||
if (al->size == al->alloced) {
|
||||
al->alloced += al->delta;
|
||||
al->list = xrealloc(al->list, sizeof(*al->list) * al->alloced);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
From bb30f997c4b22c0d5cf6752f15d2af17538f91f0 Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Thu, 9 Jan 2020 10:24:39 +0200
|
||||
Subject: [PATCH] Don't require signature header to be in single contiguous
|
||||
region part II
|
||||
|
||||
The generic case was reported in #270 and fixed quite a while ago in
|
||||
commit 34c2ba3c6a80a778cdf2e42a9193b3264e08e1b3, but signing uses a
|
||||
different code path and require the same treatment.
|
||||
|
||||
Fixes: #1002
|
||||
---
|
||||
lib/signature.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/signature.c b/lib/signature.c
|
||||
index 6f04962e8..21f04c7f2 100644
|
||||
--- a/lib/signature.c
|
||||
+++ b/lib/signature.c
|
||||
@@ -65,7 +65,7 @@ rpmRC rpmReadSignature(FD_t fd, Header * sighp, char ** msg)
|
||||
if (sighp)
|
||||
*sighp = NULL;
|
||||
|
||||
- if (hdrblobRead(fd, 1, 1, RPMTAG_HEADERSIGNATURES, &blob, &buf) != RPMRC_OK)
|
||||
+ if (hdrblobRead(fd, 1, 0, RPMTAG_HEADERSIGNATURES, &blob, &buf) != RPMRC_OK)
|
||||
goto exit;
|
||||
|
||||
/* OK, blob looks sane, load the header. */
|
||||
--
|
||||
2.27.0
|
||||
|
||||
218
backport-Fix-POPT_ARG_STRING-memleaks-in-librpmbuild.patch
Normal file
218
backport-Fix-POPT_ARG_STRING-memleaks-in-librpmbuild.patch
Normal file
@ -0,0 +1,218 @@
|
||||
From 307872f71b357a3839fd037514a1c3dabfacc611 Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Mon, 3 Feb 2020 14:54:16 +0200
|
||||
Subject: [PATCH] Fix POPT_ARG_STRING memleaks in librpmbuild
|
||||
|
||||
popt always returned malloc'ed memory for POPT_ARG_STRING items, but
|
||||
for whatever historical reason rpm systematically passed const char *
|
||||
pointers as targets, making them look non-freeable. Besides changing
|
||||
just the types and adding free()'s, const-correctness requires extra
|
||||
tweaks as there's mixed use from string literals and poptGetArg() which
|
||||
does return const pointers.
|
||||
---
|
||||
build/parseDescription.c | 11 +++++++----
|
||||
build/parseFiles.c | 5 +++--
|
||||
build/parsePolicies.c | 5 +++--
|
||||
build/parsePrep.c | 6 +++++-
|
||||
build/parseScript.c | 11 +++++++----
|
||||
build/policies.c | 8 ++++++--
|
||||
6 files changed, 31 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/build/parseDescription.c b/build/parseDescription.c
|
||||
index c0737c0..72811f5 100644
|
||||
--- a/build/parseDescription.c
|
||||
+++ b/build/parseDescription.c
|
||||
@@ -19,8 +19,8 @@ int parseDescription(rpmSpec spec)
|
||||
int rc, argc;
|
||||
int arg;
|
||||
const char **argv = NULL;
|
||||
- const char *name = NULL;
|
||||
- const char *lang = RPMBUILD_DEFAULT_LANG;
|
||||
+ char *name = NULL;
|
||||
+ char *lang = NULL;
|
||||
const char *descr = "";
|
||||
poptContext optCon = NULL;
|
||||
struct poptOption optionsTable[] = {
|
||||
@@ -52,7 +52,7 @@ int parseDescription(rpmSpec spec)
|
||||
|
||||
if (poptPeekArg(optCon)) {
|
||||
if (name == NULL)
|
||||
- name = poptGetArg(optCon);
|
||||
+ name = xstrdup(poptGetArg(optCon));
|
||||
if (poptPeekArg(optCon)) {
|
||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
||||
spec->lineNum,
|
||||
@@ -75,12 +75,15 @@ int parseDescription(rpmSpec spec)
|
||||
}
|
||||
|
||||
if (addLangTag(spec, pkg->header,
|
||||
- RPMTAG_DESCRIPTION, descr, lang)) {
|
||||
+ RPMTAG_DESCRIPTION, descr,
|
||||
+ lang ? lang : RPMBUILD_DEFAULT_LANG)) {
|
||||
nextPart = PART_ERROR;
|
||||
}
|
||||
|
||||
exit:
|
||||
freeStringBuf(sb);
|
||||
+ free(lang);
|
||||
+ free(name);
|
||||
free(argv);
|
||||
poptFreeContext(optCon);
|
||||
return nextPart;
|
||||
diff --git a/build/parseFiles.c b/build/parseFiles.c
|
||||
index 69935d4..0dc1f17 100644
|
||||
--- a/build/parseFiles.c
|
||||
+++ b/build/parseFiles.c
|
||||
@@ -17,7 +17,7 @@ int parseFiles(rpmSpec spec)
|
||||
int rc, argc;
|
||||
int arg;
|
||||
const char ** argv = NULL;
|
||||
- const char *name = NULL;
|
||||
+ char *name = NULL;
|
||||
int flag = PART_SUBNAME;
|
||||
poptContext optCon = NULL;
|
||||
struct poptOption optionsTable[] = {
|
||||
@@ -52,7 +52,7 @@ int parseFiles(rpmSpec spec)
|
||||
|
||||
if (poptPeekArg(optCon)) {
|
||||
if (name == NULL)
|
||||
- name = poptGetArg(optCon);
|
||||
+ name = xstrdup(poptGetArg(optCon));
|
||||
if (poptPeekArg(optCon)) {
|
||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
||||
spec->lineNum,
|
||||
@@ -89,6 +89,7 @@ int parseFiles(rpmSpec spec)
|
||||
exit:
|
||||
rpmPopMacro(NULL, "license");
|
||||
free(argv);
|
||||
+ free(name);
|
||||
poptFreeContext(optCon);
|
||||
|
||||
return res;
|
||||
diff --git a/build/parsePolicies.c b/build/parsePolicies.c
|
||||
index 118b92c..64b95b1 100644
|
||||
--- a/build/parsePolicies.c
|
||||
+++ b/build/parsePolicies.c
|
||||
@@ -19,7 +19,7 @@ int parsePolicies(rpmSpec spec)
|
||||
int rc, argc;
|
||||
int arg;
|
||||
const char **argv = NULL;
|
||||
- const char *name = NULL;
|
||||
+ char *name = NULL;
|
||||
int flag = PART_SUBNAME;
|
||||
poptContext optCon = NULL;
|
||||
|
||||
@@ -50,7 +50,7 @@ int parsePolicies(rpmSpec spec)
|
||||
|
||||
if (poptPeekArg(optCon)) {
|
||||
if (name == NULL)
|
||||
- name = poptGetArg(optCon);
|
||||
+ name = xstrdup(poptGetArg(optCon));
|
||||
if (poptPeekArg(optCon)) {
|
||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
||||
spec->lineNum, spec->line);
|
||||
@@ -66,6 +66,7 @@ int parsePolicies(rpmSpec spec)
|
||||
|
||||
exit:
|
||||
free(argv);
|
||||
+ free(name);
|
||||
poptFreeContext(optCon);
|
||||
|
||||
return res;
|
||||
diff --git a/build/parsePrep.c b/build/parsePrep.c
|
||||
index fe37575..cafb050 100644
|
||||
--- a/build/parsePrep.c
|
||||
+++ b/build/parsePrep.c
|
||||
@@ -242,7 +242,7 @@ static int doSetupMacro(rpmSpec spec, const char *line)
|
||||
int leaveDirs = 0, skipDefaultAction = 0;
|
||||
int createDir = 0, quietly = 0;
|
||||
int buildInPlace = 0;
|
||||
- const char * dirName = NULL;
|
||||
+ char * dirName = NULL;
|
||||
struct poptOption optionsTable[] = {
|
||||
{ NULL, 'a', POPT_ARG_STRING, NULL, 'a', NULL, NULL},
|
||||
{ NULL, 'b', POPT_ARG_STRING, NULL, 'b', NULL, NULL},
|
||||
@@ -373,6 +373,7 @@ exit:
|
||||
freeStringBuf(before);
|
||||
freeStringBuf(after);
|
||||
poptFreeContext(optCon);
|
||||
+ free(dirName);
|
||||
free(argv);
|
||||
|
||||
return rc;
|
||||
@@ -484,6 +485,9 @@ static rpmRC doPatchMacro(rpmSpec spec, const char *line)
|
||||
|
||||
exit:
|
||||
argvFree(patchnums);
|
||||
+ free(opt_b);
|
||||
+ free(opt_d);
|
||||
+ free(opt_o);
|
||||
free(argv);
|
||||
poptFreeContext(optCon);
|
||||
return rc;
|
||||
diff --git a/build/parseScript.c b/build/parseScript.c
|
||||
index bdf6ab3..e037bba 100644
|
||||
--- a/build/parseScript.c
|
||||
+++ b/build/parseScript.c
|
||||
@@ -100,9 +100,9 @@ int parseScript(rpmSpec spec, int parsePart)
|
||||
int arg;
|
||||
const char **argv = NULL;
|
||||
poptContext optCon = NULL;
|
||||
- const char *name = NULL;
|
||||
- const char *prog = "/bin/sh";
|
||||
- const char *file = NULL;
|
||||
+ char *name = NULL;
|
||||
+ char *prog = xstrdup("/bin/sh");
|
||||
+ char *file = NULL;
|
||||
int priority = 1000000;
|
||||
struct poptOption optionsTable[] = {
|
||||
{ NULL, 'p', POPT_ARG_STRING, &prog, 'p', NULL, NULL},
|
||||
@@ -326,7 +326,7 @@ int parseScript(rpmSpec spec, int parsePart)
|
||||
|
||||
if (poptPeekArg(optCon)) {
|
||||
if (name == NULL)
|
||||
- name = poptGetArg(optCon);
|
||||
+ name = xstrdup(poptGetArg(optCon));
|
||||
if (poptPeekArg(optCon)) {
|
||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
||||
spec->lineNum,
|
||||
@@ -465,6 +465,9 @@ exit:
|
||||
free(reqargs);
|
||||
freeStringBuf(sb);
|
||||
free(progArgv);
|
||||
+ free(prog);
|
||||
+ free(name);
|
||||
+ free(file);
|
||||
free(argv);
|
||||
poptFreeContext(optCon);
|
||||
|
||||
diff --git a/build/policies.c b/build/policies.c
|
||||
index d3b1930..e92df19 100644
|
||||
--- a/build/policies.c
|
||||
+++ b/build/policies.c
|
||||
@@ -276,16 +276,20 @@ static rpmRC processPolicies(rpmSpec spec, Package pkg, int test)
|
||||
}
|
||||
|
||||
if (writeModuleToHeader(mod, pkg) != RPMRC_OK) {
|
||||
- freeModule(mod);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- freeModule(mod);
|
||||
+ mod = freeModule(mod);
|
||||
+ name = _free(name);
|
||||
+ types = _free(types);
|
||||
}
|
||||
|
||||
rc = RPMRC_OK;
|
||||
|
||||
exit:
|
||||
+ freeModule(mod);
|
||||
+ free(name);
|
||||
+ free(types);
|
||||
|
||||
return rc;
|
||||
}
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
From 4ddab4fb7e1ccc7dc466534250177b7d2682a9e2 Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Wed, 29 Jan 2020 15:39:58 +0200
|
||||
Subject: [PATCH] Fix a minor memory leak on suppressed inhibition lock warning
|
||||
message
|
||||
|
||||
Commit 708e61307bc3fd027b016fdf5a1d1a5274c1843c introduced a memory leak
|
||||
on the error object: if the message is suppressed then the error object
|
||||
is never freed. Test for the suppression conditions separately to fix.
|
||||
---
|
||||
plugins/systemd_inhibit.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/plugins/systemd_inhibit.c b/plugins/systemd_inhibit.c
|
||||
index 0ddca9cd8..ecff30533 100644
|
||||
--- a/plugins/systemd_inhibit.c
|
||||
+++ b/plugins/systemd_inhibit.c
|
||||
@@ -52,12 +52,14 @@ static int inhibit(void)
|
||||
dbus_message_unref(reply);
|
||||
}
|
||||
|
||||
- if (dbus_error_is_set(&err)
|
||||
- && !dbus_error_has_name(&err, DBUS_ERROR_NO_SERVER)
|
||||
- && !dbus_error_has_name(&err, DBUS_ERROR_FILE_NOT_FOUND)) {
|
||||
- rpmlog(RPMLOG_WARNING,
|
||||
+ if (dbus_error_is_set(&err)) {
|
||||
+ if (!dbus_error_has_name(&err, DBUS_ERROR_NO_SERVER) &&
|
||||
+ !dbus_error_has_name(&err, DBUS_ERROR_FILE_NOT_FOUND))
|
||||
+ {
|
||||
+ rpmlog(RPMLOG_WARNING,
|
||||
"Unable to get systemd shutdown inhibition lock: %s\n",
|
||||
err.message);
|
||||
+ }
|
||||
dbus_error_free(&err);
|
||||
}
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
From 67f8dadebdf290c4ade36a7d3a27e52048d96032 Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Tue, 4 Feb 2020 10:36:43 +0200
|
||||
Subject: [PATCH] Fix build regression in commit
|
||||
307872f71b357a3839fd037514a1c3dabfacc611
|
||||
|
||||
Commit 307872f71b357a3839fd037514a1c3dabfacc611 broke build with
|
||||
SELinux enabled but was accidentally merged. Fix the breakage.
|
||||
---
|
||||
build/policies.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/build/policies.c b/build/policies.c
|
||||
index e92df194a..16d5f87e6 100644
|
||||
--- a/build/policies.c
|
||||
+++ b/build/policies.c
|
||||
@@ -221,6 +221,7 @@ static rpmRC processPolicies(rpmSpec spec, Package pkg, int test)
|
||||
char *types = NULL;
|
||||
uint32_t flags = 0;
|
||||
poptContext optCon = NULL;
|
||||
+ ModuleRec mod = NULL;
|
||||
|
||||
rpmRC rc = RPMRC_FAIL;
|
||||
|
||||
@@ -236,7 +237,6 @@ static rpmRC processPolicies(rpmSpec spec, Package pkg, int test)
|
||||
}
|
||||
|
||||
for (ARGV_const_t pol = pkg->policyList; *pol != NULL; pol++) {
|
||||
- ModuleRec mod;
|
||||
const char *line = *pol;
|
||||
const char **argv = NULL;
|
||||
int argc = 0;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
From 486579912381ede82172dc6d0ff3941a6d0536b5 Mon Sep 17 00:00:00 2001
|
||||
From: Hongxu Jia <hongxu.jia@windriver.com>
|
||||
Date: Wed, 3 Jun 2020 10:25:24 +0800
|
||||
Subject: [PATCH] Fix: bump up the limit of signature header to 64MB
|
||||
|
||||
Since commits [Place file signatures into the signature header where they
|
||||
belong][1] applied, run `rpm -Kv **.rpm' failed if signature header
|
||||
is larger than 64KB. Here are steps:
|
||||
|
||||
1) A unsigned rpm package, the size is 227560 bytes
|
||||
$ ls -al xz-src-5.2.5-r0.corei7_64.rpm
|
||||
-rw-------. 1 mockbuild 1000 227560 Jun 3 09:59
|
||||
|
||||
2) Sign the rpm package
|
||||
$ rpmsign --addsign ... xz-src-5.2.5-r0.corei7_64.rpm
|
||||
|
||||
3) The size of signed rpm is 312208 bytes
|
||||
$ ls -al xz-src-5.2.5-r0.corei7_64.rpm
|
||||
-rw-------. 1 mockbuild 1000 312208 Jun 3 09:48
|
||||
|
||||
4) Run `rpm -Kv' failed with signature hdr data out of range
|
||||
$ rpm -Kv xz-src-5.2.5-r0.corei7_64.rpm
|
||||
xz-src-5.2.5-r0.corei7_64.rpm:
|
||||
error: xz-src-5.2.5-r0.corei7_64.rpm: signature hdr data: BAD, no. of
|
||||
bytes(88864) out of range
|
||||
|
||||
From 1) and 3), the size of signed rpm package increased
|
||||
312208 - 227560 = 84648, so the check of dl_max (64KB,65536)
|
||||
is not enough.
|
||||
|
||||
As [1] said:
|
||||
|
||||
This also means the signature header can be MUCH bigger than ever
|
||||
before,so bump up the limit (to 64MB, arbitrary something for now)
|
||||
|
||||
So [1] missed to multiply by 1024.
|
||||
|
||||
[1] https://github.com/rpm-software-management/rpm/commit/f558e886050c4e98f6cdde391df679a411b3f62c
|
||||
|
||||
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
|
||||
---
|
||||
lib/header.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/header.c b/lib/header.c
|
||||
index f9152ba90..e59d63744 100644
|
||||
--- a/lib/header.c
|
||||
+++ b/lib/header.c
|
||||
@@ -1903,7 +1903,7 @@ rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrbl
|
||||
|
||||
if (regionTag == RPMTAG_HEADERSIGNATURES) {
|
||||
il_max = 32;
|
||||
- dl_max = 64 * 1024;
|
||||
+ dl_max = 64 * 1024 * 1024;
|
||||
}
|
||||
|
||||
memset(block, 0, sizeof(block));
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,98 @@
|
||||
From a58725822651f791b2e74fe40a6e85b3b7e72aca Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Mon, 10 Aug 2020 11:01:37 +0300
|
||||
Subject: [PATCH] Fix changelog trimming to work relative to newest
|
||||
existing
|
||||
entry (#1301)
|
||||
|
||||
%_changelog_trimtime is an absolute timestamp which needs to be
|
||||
%constantly
|
||||
pushed forward to preserve the same relative age, and will start
|
||||
trimming
|
||||
entries from unchanged packages until none are left, leading to
|
||||
unexpected
|
||||
and confusing behavior (RhBug:1722806, ...)
|
||||
|
||||
It's better to trim by age relative to newest changelog entry. This way
|
||||
the
|
||||
number of trimmed entries will not change unless the spec changes, and
|
||||
at
|
||||
least one entry is always preserved. Introduce a new %_changelog_trimage
|
||||
macro for this and mark the broken by design %_changelog_trimtime as
|
||||
deprecated, but autoconvert an existing trimtime into relative for now.
|
||||
|
||||
As a seemingly unrelated change, move the "time" variable declaration
|
||||
to a narrower scope to unmask the time() function for use on entry.
|
||||
|
||||
Fixes: #1301
|
||||
---
|
||||
build/parseChangelog.c | 16 +++++++++++++++-
|
||||
macros.in | 6 +++++-
|
||||
2 files changed, 20 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/build/parseChangelog.c b/build/parseChangelog.c
|
||||
index ad6d834..22f445e 100644
|
||||
--- a/build/parseChangelog.c
|
||||
+++ b/build/parseChangelog.c
|
||||
@@ -200,18 +200,26 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
|
||||
rpmRC rc = RPMRC_FAIL; /* assume failure */
|
||||
char *s, *sp;
|
||||
int i;
|
||||
- time_t time;
|
||||
+ time_t firstTime = 0;
|
||||
time_t lastTime = 0;
|
||||
time_t trimtime = rpmExpandNumeric("%{?_changelog_trimtime}");
|
||||
+ time_t trimage = rpmExpandNumeric("%{?_changelog_trimage}");
|
||||
char *date, *name, *text, *next;
|
||||
int date_words; /* number of words in date string */
|
||||
|
||||
+ /* Convert _changelog_trimtime to age for backwards compatibility */
|
||||
+ if (trimtime && !trimage) {
|
||||
+ trimage = time(NULL) - trimtime;
|
||||
+ trimtime = 0;
|
||||
+ }
|
||||
+
|
||||
s = sp = argvJoin(sb, "");
|
||||
|
||||
/* skip space */
|
||||
SKIPSPACE(s);
|
||||
|
||||
while (*s != '\0') {
|
||||
+ time_t time;
|
||||
if (*s != '*') {
|
||||
rpmlog(RPMLOG_ERR, _("%%changelog entries must start with *\n"));
|
||||
goto exit;
|
||||
@@ -235,6 +243,12 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
|
||||
rpmlog(RPMLOG_ERR, _("bad date in %%changelog: %s\n"), date);
|
||||
goto exit;
|
||||
}
|
||||
+ /* Changelog trimming is always relative to first entry */
|
||||
+ if (!firstTime) {
|
||||
+ firstTime = time;
|
||||
+ if (trimage)
|
||||
+ trimtime = firstTime - trimage;
|
||||
+ }
|
||||
if (lastTime && lastTime < time) {
|
||||
rpmlog(RPMLOG_ERR,
|
||||
_("%%changelog not in descending chronological order\n"));
|
||||
diff --git a/macros.in b/macros.in
|
||||
index 8619c13..5b45d73 100644
|
||||
--- a/macros.in
|
||||
+++ b/macros.in
|
||||
@@ -230,8 +230,12 @@ package or when debugging this package.\
|
||||
# The path to the gzip executable (legacy, use %{__gzip} instead).
|
||||
%_gzipbin %{__gzip}
|
||||
|
||||
+# Maximum age of preserved changelog entries in binary packages,
|
||||
+# relative to newest existing entry. Unix timestamp format.
|
||||
+%_changelog_trimage 0
|
||||
+
|
||||
# The Unix time of the latest kept changelog entry in binary packages.
|
||||
-# Any older entry is not packaged in binary packages.
|
||||
+# DEPRACATED, use %_changelog_trimage instead.
|
||||
%_changelog_trimtime 0
|
||||
|
||||
# If true, set the SOURCE_DATE_EPOCH environment variable
|
||||
--
|
||||
2.27.0
|
||||
|
||||
41
backport-Fix-isUnorderedReq-for-multiple-qualifiers.patch
Normal file
41
backport-Fix-isUnorderedReq-for-multiple-qualifiers.patch
Normal file
@ -0,0 +1,41 @@
|
||||
From d937b04fb1cb5d3ca303bd458169c352a4b52669 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Festi <ffesti@redhat.com>
|
||||
Date: Fri, 31 Jan 2020 12:27:26 +0100
|
||||
Subject: [PATCH] Fix isUnorderedReq() for multiple qualifiers
|
||||
|
||||
isUnorderedReq() returned True as soon as any qualifier that does not
|
||||
require ordering is passed. But some qulifiers - basically the scriptlets
|
||||
run during installation and erasure of the package - may still require
|
||||
the dependency to be taken into account during ordering.
|
||||
|
||||
Now isUnorderedReq() returns 0 if any of those are also set.
|
||||
|
||||
Resolves: #1030
|
||||
---
|
||||
lib/rpmds.h | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/rpmds.h b/lib/rpmds.h
|
||||
index 491d8738d..d160c948e 100644
|
||||
--- a/lib/rpmds.h
|
||||
+++ b/lib/rpmds.h
|
||||
@@ -82,12 +82,14 @@ typedef rpmFlags rpmsenseFlags;
|
||||
_notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
|
||||
#define _UNORDERED_ONLY_MASK \
|
||||
_notpre(RPMSENSE_RPMLIB|RPMSENSE_CONFIG|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS|RPMSENSE_SCRIPT_VERIFY)
|
||||
+#define _FORCE_ORDER_ONLY_MASK \
|
||||
+ _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
|
||||
|
||||
#define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
|
||||
#define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
|
||||
#define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
|
||||
-#define isUnorderedReq(_x) ((_x) & _UNORDERED_ONLY_MASK)
|
||||
-
|
||||
+#define isUnorderedReq(_x) ((_x) & _UNORDERED_ONLY_MASK && \
|
||||
+ !((_x) & _FORCE_ORDER_ONLY_MASK))
|
||||
|
||||
|
||||
/** \ingroup rpmds
|
||||
--
|
||||
2.27.0
|
||||
|
||||
54
backport-Fix-logic-error-in-grabArgs.patch
Normal file
54
backport-Fix-logic-error-in-grabArgs.patch
Normal file
@ -0,0 +1,54 @@
|
||||
From 6d7fa91949337c7a86bab3359b39558fdae07dce Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Fri, 23 Oct 2020 14:02:35 +0200
|
||||
Subject: [PATCH] Fix logic error in grabArgs()
|
||||
|
||||
If there was a \ at the end of the buffer, the code would
|
||||
return a pointer after the trailing \0 leading to unallocated
|
||||
memory access and weird results in some cases.
|
||||
|
||||
See commit 817959609b95afe34ce0f7f6c3dc5d7d0d9a8470.
|
||||
---
|
||||
rpmio/macro.c | 2 +-
|
||||
tests/rpmmacro.at | 5 +++++
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rpmio/macro.c b/rpmio/macro.c
|
||||
index 1edcb39e6..a1ed9b288 100644
|
||||
--- a/rpmio/macro.c
|
||||
+++ b/rpmio/macro.c
|
||||
@@ -947,7 +947,7 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
|
||||
splitQuoted(&argv, s, " \t");
|
||||
free(s);
|
||||
|
||||
- cont = ((*lastc == '\0' || *lastc == '\n') && *(lastc-1) != '\\') ?
|
||||
+ cont = (*lastc == '\0') || (*lastc == '\n' && *(lastc-1) != '\\') ?
|
||||
lastc : lastc + 1;
|
||||
}
|
||||
|
||||
diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at
|
||||
index d972a1197..a21952c46 100644
|
||||
--- a/tests/rpmmacro.at
|
||||
+++ b/tests/rpmmacro.at
|
||||
@@ -179,6 +179,9 @@ runroot rpm \
|
||||
--eval '%foo %{quote: 2 3 5} %{quote:%{nil}}' \
|
||||
--eval '%foo x%{quote:y}z 123' \
|
||||
--eval '%foo x%{quote:%{nil}}z' \
|
||||
+ --eval '%foo 1 \
|
||||
+bar' \
|
||||
+ --eval '%foo 1 \' \
|
||||
],
|
||||
[0],
|
||||
[1:"1"
|
||||
@@ -190,6 +193,8 @@ runroot rpm \
|
||||
2:" 2 3 5" ""
|
||||
2:"xyz" "123"
|
||||
1:"xz"
|
||||
+2:"1" "\"bar
|
||||
+2:"1" "\"
|
||||
])
|
||||
AT_CLEANUP
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
From c886b359ba5f05eec6a8da34b55437834b7d80ee Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Thu, 6 Feb 2020 14:51:14 +0200
|
||||
Subject: [PATCH] Fix pointer dereference before testing for NULL in
|
||||
rpmtdGetNumber()
|
||||
|
||||
---
|
||||
lib/rpmtd.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/rpmtd.c b/lib/rpmtd.c
|
||||
index e33c8cb53..41c6a50e8 100644
|
||||
--- a/lib/rpmtd.c
|
||||
+++ b/lib/rpmtd.c
|
||||
@@ -210,12 +210,12 @@ const char * rpmtdGetString(rpmtd td)
|
||||
|
||||
uint64_t rpmtdGetNumber(rpmtd td)
|
||||
{
|
||||
- uint64_t val = 0;
|
||||
- int ix = (td->ix >= 0 ? td->ix : 0);
|
||||
-
|
||||
if (td == NULL)
|
||||
return 0;
|
||||
|
||||
+ uint64_t val = 0;
|
||||
+ int ix = (td->ix >= 0 ? td->ix : 0);
|
||||
+
|
||||
switch (td->type) {
|
||||
case RPM_INT64_TYPE:
|
||||
val = *((uint64_t *) td->data + ix);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
From 747b7119ae89a3ccaceeae4f5570c7ab83d2cf5d Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Tue, 1 Sep 2020 13:14:35 +0300
|
||||
Subject: [PATCH] Fix possible read beyond buffer in rstrnlenhash()
|
||||
|
||||
On strings that are not \0-terminated (which are a big reason for the
|
||||
existence of this function), the while-loop would try to compare the
|
||||
first character beyond the specified buffer for '\0' before realizing
|
||||
we're already beyond the end when checking n. Should be mostly harmless
|
||||
in practise as the check for n would still terminate it, but not right.
|
||||
In particular this trips up address sanitizer with the bdb backend where
|
||||
some of the returned strings are not \0-terminated.
|
||||
|
||||
Test for string length first, and move the decrementing side-effect into
|
||||
the loop for better readability.
|
||||
---
|
||||
rpmio/rpmstrpool.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rpmio/rpmstrpool.c b/rpmio/rpmstrpool.c
|
||||
index 776ca6dea..0db0b5313 100644
|
||||
--- a/rpmio/rpmstrpool.c
|
||||
+++ b/rpmio/rpmstrpool.c
|
||||
@@ -88,11 +88,12 @@ static inline unsigned int rstrnlenhash(const char * str, size_t n, size_t * len
|
||||
unsigned int hash = 0xe4721b68;
|
||||
const char * s = str;
|
||||
|
||||
- while (*s != '\0' && n-- > 0) {
|
||||
+ while (n > 0 && *s != '\0') {
|
||||
hash += *s;
|
||||
hash += (hash << 10);
|
||||
hash ^= (hash >> 6);
|
||||
s++;
|
||||
+ n--;
|
||||
}
|
||||
hash += (hash << 3);
|
||||
hash ^= (hash >> 11);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
From 85e5a70368854da0537099128530b0df69ca2216 Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Wed, 29 Jan 2020 13:58:16 +0200
|
||||
Subject: [PATCH] Fix regression on v3 package handling on database rebuild
|
||||
|
||||
Introduced in commit 27ea3f8624560bd158fc7bc801639310a0ffab10, the
|
||||
wrong header is being added in case of v3 packages.
|
||||
|
||||
Fixes: #1017
|
||||
---
|
||||
lib/rpmdb.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/rpmdb.c b/lib/rpmdb.c
|
||||
index 7ae67563f..91543eb68 100644
|
||||
--- a/lib/rpmdb.c
|
||||
+++ b/lib/rpmdb.c
|
||||
@@ -2557,7 +2557,7 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
|
||||
/* Deleted entries are eliminated in legacy headers by copy. */
|
||||
if (headerIsEntry(h, RPMTAG_HEADERIMAGE)) {
|
||||
Header nh = headerReload(headerCopy(h), RPMTAG_HEADERIMAGE);
|
||||
- rc = rpmdbAdd(newdb, h);
|
||||
+ rc = rpmdbAdd(newdb, nh);
|
||||
headerFree(nh);
|
||||
} else {
|
||||
rc = rpmdbAdd(newdb, h);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
49
backport-Fix-resource-leaks-on-zstd-open-error-paths.patch
Normal file
49
backport-Fix-resource-leaks-on-zstd-open-error-paths.patch
Normal file
@ -0,0 +1,49 @@
|
||||
From 6b18e76f3db5dd3db5a468c947309322d8bc11aa Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Thu, 21 Nov 2019 12:22:45 +0200
|
||||
Subject: [PATCH] Fix resource leaks on zstd open error paths
|
||||
|
||||
If zstd stream initialization fails, the opened fd and the stream
|
||||
itself are leaked. Handle error exit in a central label.
|
||||
---
|
||||
rpmio/rpmio.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
|
||||
index 243942411..10ba20cd6 100644
|
||||
--- a/rpmio/rpmio.c
|
||||
+++ b/rpmio/rpmio.c
|
||||
@@ -1128,13 +1128,13 @@ static rpmzstd rpmzstdNew(int fdno, const char *fmode)
|
||||
if ((flags & O_ACCMODE) == O_RDONLY) { /* decompressing */
|
||||
if ((_stream = (void *) ZSTD_createDStream()) == NULL
|
||||
|| ZSTD_isError(ZSTD_initDStream(_stream))) {
|
||||
- return NULL;
|
||||
+ goto err;
|
||||
}
|
||||
nb = ZSTD_DStreamInSize();
|
||||
} else { /* compressing */
|
||||
if ((_stream = (void *) ZSTD_createCStream()) == NULL
|
||||
|| ZSTD_isError(ZSTD_initCStream(_stream, level))) {
|
||||
- return NULL;
|
||||
+ goto err;
|
||||
}
|
||||
nb = ZSTD_CStreamOutSize();
|
||||
}
|
||||
@@ -1149,6 +1149,14 @@ static rpmzstd rpmzstdNew(int fdno, const char *fmode)
|
||||
zstd->b = xmalloc(nb);
|
||||
|
||||
return zstd;
|
||||
+
|
||||
+err:
|
||||
+ fclose(fp);
|
||||
+ if ((flags & O_ACCMODE) == O_RDONLY)
|
||||
+ ZSTD_freeDStream(_stream);
|
||||
+ else
|
||||
+ ZSTD_freeCStream(_stream);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
static FD_t zstdFdopen(FD_t fd, int fdno, const char * fmode)
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
From 83a5a20352dccd336a0114238c5988f0a9fa6d3e Mon Sep 17 00:00:00 2001
|
||||
From: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
Date: Thu, 23 Jan 2020 14:21:26 +0100
|
||||
Subject: [PATCH] If fork fails in getOutputFrom(), close opened unused pipe
|
||||
fds on error code path
|
||||
|
||||
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
||||
---
|
||||
build/rpmfc.c | 16 +++++++++++-----
|
||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/build/rpmfc.c b/build/rpmfc.c
|
||||
index f5f3793b9..81101518b 100644
|
||||
--- a/build/rpmfc.c
|
||||
+++ b/build/rpmfc.c
|
||||
@@ -277,6 +277,17 @@ static int getOutputFrom(ARGV_t argv,
|
||||
}
|
||||
|
||||
child = fork();
|
||||
+ if (child < 0) {
|
||||
+ rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"),
|
||||
+ argv[0], strerror(errno));
|
||||
+ if (doio) {
|
||||
+ close(toProg[1]);
|
||||
+ close(toProg[0]);
|
||||
+ close(fromProg[0]);
|
||||
+ close(fromProg[1]);
|
||||
+ }
|
||||
+ return -1;
|
||||
+ }
|
||||
if (child == 0) {
|
||||
close(toProg[1]);
|
||||
close(fromProg[0]);
|
||||
@@ -299,11 +310,6 @@ static int getOutputFrom(ARGV_t argv,
|
||||
argv[0], strerror(errno));
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
- if (child < 0) {
|
||||
- rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"),
|
||||
- argv[0], strerror(errno));
|
||||
- return -1;
|
||||
- }
|
||||
|
||||
if (!doio)
|
||||
goto reap;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
31
backport-Make-fdSeek-return-0-on-success-1-on-error.patch
Normal file
31
backport-Make-fdSeek-return-0-on-success-1-on-error.patch
Normal file
@ -0,0 +1,31 @@
|
||||
From d1dee9c00af418004f578a97e9b794676daf6d37 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Almond <malmond@fb.com>
|
||||
Date: Mon, 28 Sep 2020 12:41:22 -0700
|
||||
Subject: [PATCH] Make fdSeek return 0 on success, -1 on error
|
||||
|
||||
This code eliminates a false positive failure when the destination
|
||||
position is > 2GiB. This is done by changing the contract for `Fseek`.
|
||||
Now it returns `0` on success instead of an `int` offset.
|
||||
Care should be used to interpret the result as there is a difference in
|
||||
semantics between the POSIX `fseek(2)`. Existing code is correct: negative
|
||||
results are still failures.
|
||||
---
|
||||
rpmio/rpmio.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
|
||||
index 10a28a923..9f4a60aa1 100644
|
||||
--- a/rpmio/rpmio.c
|
||||
+++ b/rpmio/rpmio.c
|
||||
@@ -382,7 +382,7 @@ static ssize_t fdWrite(FDSTACK_t fps, const void * buf, size_t count)
|
||||
|
||||
static int fdSeek(FDSTACK_t fps, off_t pos, int whence)
|
||||
{
|
||||
- return lseek(fps->fdno, pos, whence);
|
||||
+ return (lseek(fps->fdno, pos, whence) == -1) ? -1 : 0;
|
||||
}
|
||||
|
||||
static int fdClose(FDSTACK_t fps)
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
From 92a78e6acf3f056faccebb25a9d310ee96f8015d Mon Sep 17 00:00:00 2001
|
||||
From: Cerul Alain <ae@metaeducation.com>
|
||||
Date: Mon, 13 Jul 2020 00:34:42 -0400
|
||||
Subject: [PATCH] Remove compare of global array tagsByName to NULL
|
||||
|
||||
A 2016 change (57a96d2486c26142ebb168a1f00b0374d35bf044) apparently
|
||||
changed tagsByName from dynamic allocation to being static, so that
|
||||
Valgrind would not complain about lost memory. The definition is:
|
||||
|
||||
static headerTagTableEntry tagsByName[TABLESIZE];
|
||||
|
||||
But a comparison was left of `tagsByName == NULL` in lib/tagname.c
|
||||
and compiling with clang gives a warning, saying it is never NULL.
|
||||
---
|
||||
lib/tagname.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/tagname.c b/lib/tagname.c
|
||||
index 68b252991..4efd847eb 100644
|
||||
--- a/lib/tagname.c
|
||||
+++ b/lib/tagname.c
|
||||
@@ -234,7 +234,7 @@ int rpmTagGetNames(rpmtd tagnames, int fullname)
|
||||
|
||||
pthread_once(&tagsLoaded, loadTags);
|
||||
|
||||
- if (tagnames == NULL || tagsByName == NULL)
|
||||
+ if (tagnames == NULL)
|
||||
return 0;
|
||||
|
||||
rpmtdReset(tagnames);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
101
backport-Use-libelf-for-determining-file-colors.patch
Normal file
101
backport-Use-libelf-for-determining-file-colors.patch
Normal file
@ -0,0 +1,101 @@
|
||||
From 3c061be6aeaec1be793b406fac9f667dc5d1429b Mon Sep 17 00:00:00 2001
|
||||
From: Panu Matilainen <pmatilai@redhat.com>
|
||||
Date: Wed, 4 Mar 2020 11:15:02 +0200
|
||||
Subject: [PATCH] Use libelf for determining file colors
|
||||
|
||||
libmagic strings are notoriously unreliable as the details from version
|
||||
to version. We link to libelf anyway so we might as well as get the
|
||||
info straight from the horse's mouth.
|
||||
|
||||
Besides being more reliable, this detaches the coloring business from
|
||||
the hardcoded rpmfcTokens struct and informative-only FILECLASS
|
||||
contents,
|
||||
opening the door for other changes in that area.
|
||||
---
|
||||
build/rpmfc.c | 35 +++++++++++++++++++++++++++++------
|
||||
1 file changed, 29 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/build/rpmfc.c b/build/rpmfc.c
|
||||
index aaa0dca..0886616 100644
|
||||
--- a/build/rpmfc.c
|
||||
+++ b/build/rpmfc.c
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <signal.h>
|
||||
#include <magic.h>
|
||||
#include <regex.h>
|
||||
+#include <gelf.h>
|
||||
|
||||
#include <rpm/header.h>
|
||||
#include <rpm/argv.h>
|
||||
@@ -595,7 +596,7 @@ exit:
|
||||
return rc;
|
||||
}
|
||||
|
||||
-/* Only used for elf coloring and controlling RPMTAG_FILECLASS inclusion now */
|
||||
+/* Only used for controlling RPMTAG_FILECLASS inclusion now */
|
||||
static const struct rpmfcTokens_s rpmfcTokens[] = {
|
||||
{ "directory", RPMFC_INCLUDE },
|
||||
|
||||
@@ -1076,6 +1077,29 @@ static int initAttrs(rpmfc fc)
|
||||
return nattrs;
|
||||
}
|
||||
|
||||
+static uint32_t getElfColor(const char *fn)
|
||||
+{
|
||||
+ uint32_t color = 0;
|
||||
+ int fd = open(fn, O_RDONLY);
|
||||
+ if (fd >= 0) {
|
||||
+ Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
|
||||
+ GElf_Ehdr ehdr;
|
||||
+ if (elf && gelf_getehdr(elf, &ehdr)) {
|
||||
+ switch (ehdr.e_ident[EI_CLASS]) {
|
||||
+ case ELFCLASS64:
|
||||
+ color = RPMFC_ELF64;
|
||||
+ break;
|
||||
+ case ELFCLASS32:
|
||||
+ color = RPMFC_ELF32;
|
||||
+ break;
|
||||
+ }
|
||||
+ elf_end(elf);
|
||||
+ }
|
||||
+ close(fd);
|
||||
+ }
|
||||
+ return color;
|
||||
+}
|
||||
+
|
||||
rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
|
||||
{
|
||||
int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS;
|
||||
@@ -1187,8 +1211,6 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
|
||||
/* Add attributes based on file type and/or path */
|
||||
rpmfcAttributes(fc, ix, ftype, s);
|
||||
|
||||
- fc->fcolor[ix] = fcolor;
|
||||
-
|
||||
/* Add to file class dictionary and index array */
|
||||
#pragma omp ordered
|
||||
if (fcolor != RPMFC_WHITE && (fcolor & RPMFC_INCLUDE)) {
|
||||
@@ -1202,6 +1224,10 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
|
||||
}
|
||||
/* Pool id's start from 1, for headers we want it from 0 */
|
||||
fc->fcdictx[ix] = ftypeId - 1;
|
||||
+
|
||||
+ /* Add ELF colors */
|
||||
+ if (S_ISREG(mode) && is_executable)
|
||||
+ fc->fcolor[ix] = getElfColor(s);
|
||||
}
|
||||
|
||||
if (ms != NULL)
|
||||
@@ -1493,9 +1519,6 @@ rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg)
|
||||
goto exit;
|
||||
|
||||
/* Add per-file colors(#files) */
|
||||
- /* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */
|
||||
- for (int i = 0; i < fc->nfiles; i++)
|
||||
- fc->fcolor[i] &= 0x0f;
|
||||
headerPutUint32(pkg->header, RPMTAG_FILECOLORS, fc->fcolor, fc->nfiles);
|
||||
|
||||
/* Add classes(#classes) */
|
||||
--
|
||||
2.27.0
|
||||
|
||||
29
backport-fix-zstd-magic.patch
Normal file
29
backport-fix-zstd-magic.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From c464f1ece501346da11ed7582b8d46682363a285 Mon Sep 17 00:00:00 2001
|
||||
From: Thierry Vignaud <tvignaud@redhat.com>
|
||||
Date: Mon, 23 Dec 2019 16:51:49 +0100
|
||||
Subject: [PATCH] fix zstd magic
|
||||
|
||||
I spot it while adding support for zstd compressed metadata in
|
||||
URPM/urpmi, which was broken by this typo
|
||||
|
||||
typo introduced in commit 3684424fe297c996bb05bb64631336fa2903df12
|
||||
---
|
||||
rpmio/rpmfileutil.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rpmio/rpmfileutil.c b/rpmio/rpmfileutil.c
|
||||
index bda97adf1..84ee34f4d 100644
|
||||
--- a/rpmio/rpmfileutil.c
|
||||
+++ b/rpmio/rpmfileutil.c
|
||||
@@ -188,7 +188,7 @@ int rpmFileIsCompressed(const char * file, rpmCompressedMagic * compressed)
|
||||
(magic[4] == 0x5a) && (magic[5] == 0x00)) {
|
||||
/* new style xz (lzma) with magic */
|
||||
*compressed = COMPRESSED_XZ;
|
||||
- } else if ((magic[0] == 0x28) && (magic[1] == 0x85) &&
|
||||
+ } else if ((magic[0] == 0x28) && (magic[1] == 0xB5) &&
|
||||
(magic[2] == 0x2f) ) {
|
||||
*compressed = COMPRESSED_ZSTD;
|
||||
} else if ((magic[0] == 'L') && (magic[1] == 'Z') &&
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
From 52c3ee60a1ce0e7e527dc396dd1e1a0e29b7b0ed Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schroeder <mls@suse.de>
|
||||
Date: Fri, 10 Jan 2020 15:47:13 +0100
|
||||
Subject: [PATCH] ndb: only clear the dbenv in the rpmdb if the last reference
|
||||
is gone
|
||||
|
||||
Otherwise we will segfault if just one index is closed.
|
||||
---
|
||||
lib/backend/ndb/glue.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/backend/ndb/glue.c b/lib/backend/ndb/glue.c
|
||||
index 376e360e3..841c2fe42 100644
|
||||
--- a/lib/backend/ndb/glue.c
|
||||
+++ b/lib/backend/ndb/glue.c
|
||||
@@ -52,8 +52,8 @@ static void closeEnv(rpmdb rdb)
|
||||
if (ndbenv->data)
|
||||
free(ndbenv->data);
|
||||
free(ndbenv);
|
||||
+ rdb->db_dbenv = 0;
|
||||
}
|
||||
- rdb->db_dbenv = 0;
|
||||
}
|
||||
|
||||
static struct ndbEnv_s *openEnv(rpmdb rdb)
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -0,0 +1,47 @@
|
||||
From f34030816d84dfbf52f259404b32b81e53c21fbb Mon Sep 17 00:00:00 2001
|
||||
From: Jes Sorensen <jsorensen@fb.com>
|
||||
Date: Fri, 3 Apr 2020 14:09:18 -0400
|
||||
Subject: [PATCH] rpmfiArchiveRead() use signed return value to handle -1 on
|
||||
error
|
||||
|
||||
size_t is unsigned, so returning -1 is not going to have the expected
|
||||
behavior. Fix it to return ssize_t.
|
||||
|
||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
||||
---
|
||||
lib/rpmarchive.h | 4 ++--
|
||||
lib/rpmfi.c | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/lib/rpmarchive.h b/lib/rpmarchive.h
|
||||
index c864e5b56..2484b4d71 100644
|
||||
--- a/lib/rpmarchive.h
|
||||
+++ b/lib/rpmarchive.h
|
||||
@@ -122,9 +122,9 @@ int rpmfiArchiveWriteFile(rpmfi fi, FD_t fd);
|
||||
* @param fi file info
|
||||
* @param buf pointer to buffer
|
||||
* @param size number of bytes to read
|
||||
- * @return bytes actually read
|
||||
+ * @return bytes actually read, -1 on error
|
||||
*/
|
||||
-size_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size);
|
||||
+ssize_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size);
|
||||
|
||||
/** \ingroup payload
|
||||
* Has current file content stored in the archive
|
||||
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
|
||||
index c314a8b29..af428468c 100644
|
||||
--- a/lib/rpmfi.c
|
||||
+++ b/lib/rpmfi.c
|
||||
@@ -2261,7 +2261,7 @@ int rpmfiArchiveHasContent(rpmfi fi)
|
||||
return res;
|
||||
}
|
||||
|
||||
-size_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size)
|
||||
+ssize_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size)
|
||||
{
|
||||
if (fi == NULL || fi->archive == NULL)
|
||||
return -1;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
30
backport-rpmio-initialise-libgcrypt.patch
Normal file
30
backport-rpmio-initialise-libgcrypt.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 61ea5a8ea64dc130713da889f3f0c8da1a547bd9 Mon Sep 17 00:00:00 2001
|
||||
From: Ross Burton <ross.burton@intel.com>
|
||||
Date: Wed, 4 Dec 2019 17:13:10 +0000
|
||||
Subject: [PATCH] rpmio: initialise libgcrypt
|
||||
|
||||
If we're using libgcrypt for hashing we need to initialise libgcrypt as
|
||||
otherwise it is not thread-safe. Without this it will crash when used
|
||||
in parallel packaging runs.
|
||||
|
||||
Fixes #968
|
||||
---
|
||||
rpmio/digest_libgcrypt.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/rpmio/digest_libgcrypt.c b/rpmio/digest_libgcrypt.c
|
||||
index b31fda569..291187f60 100644
|
||||
--- a/rpmio/digest_libgcrypt.c
|
||||
+++ b/rpmio/digest_libgcrypt.c
|
||||
@@ -20,6 +20,8 @@ struct DIGEST_CTX_s {
|
||||
/**************************** init ************************************/
|
||||
|
||||
int rpmInitCrypto(void) {
|
||||
+ gcry_check_version (NULL);
|
||||
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
32
rpm.spec
32
rpm.spec
@ -1,6 +1,6 @@
|
||||
Name: rpm
|
||||
Version: 4.15.1
|
||||
Release: 20
|
||||
Release: 21
|
||||
Summary: RPM Package Manager
|
||||
License: GPLv2+
|
||||
URL: http://www.rpm.org/
|
||||
@ -25,6 +25,30 @@ Patch15: Don-t-add-dist-to-release-if-it-is-already-there.patch
|
||||
Patch16: Use-user.digest_list-to-avoid-duplicate-processing-o.patch
|
||||
Patch17: call-process_digest_list-after-files-are-added.patch
|
||||
|
||||
Patch18: backport-Fix-changelog-trimming-to-work-relative-to-newest-ex.patch
|
||||
Patch19: backport-Fix-resource-leaks-on-zstd-open-error-paths.patch
|
||||
Patch20: backport-rpmio-initialise-libgcrypt.patch
|
||||
Patch21: backport-fix-zstd-magic.patch
|
||||
Patch22: backport-Don-t-require-signature-header-to-be-in-single-conti.patch
|
||||
Patch23: backport-ndb-only-clear-the-dbenv-in-the-rpmdb-if-the-last-re.patch
|
||||
Patch24: backport-Fix-regression-on-v3-package-handling-on-database-re.patch
|
||||
Patch25: backport-Fix-a-minor-memory-leak-on-suppressed-inhibition-loc.patch
|
||||
Patch26: backport-Fix-POPT_ARG_STRING-memleaks-in-librpmbuild.patch
|
||||
Patch27: backport-Fix-build-regression-in-commit-307872f71b357a3839fd0.patch
|
||||
Patch28: backport-Fix-isUnorderedReq-for-multiple-qualifiers.patch
|
||||
Patch29: backport-If-fork-fails-in-getOutputFrom-close-opened-unused-p.patch
|
||||
Patch30: backport-Fix-pointer-dereference-before-testing-for-NULL-in-r.patch
|
||||
Patch31: backport-Don-t-look-into-source-package-provides-in-depsolvin.patch
|
||||
Patch32: backport-rpmfiArchiveRead-use-signed-return-value-to-handle-1.patch
|
||||
Patch33: backport-Fix-bump-up-the-limit-of-signature-header-to-64MB.patch
|
||||
Patch34: backport-Remove-compare-of-global-array-tagsByName-to-NULL.patch
|
||||
Patch35: backport-Always-close-libelf-handle-1313.patch
|
||||
Patch36: backport-Add-missing-terminator-to-copyTagsFromMainDebug-arra.patch
|
||||
Patch37: backport-Fix-possible-read-beyond-buffer-in-rstrnlenhash.patch
|
||||
Patch38: backport-Make-fdSeek-return-0-on-success-1-on-error.patch
|
||||
Patch39: backport-Fix-logic-error-in-grabArgs.patch
|
||||
Patch40: backport-Use-libelf-for-determining-file-colors.patch
|
||||
|
||||
BuildRequires: gcc autoconf automake libtool make gawk popt-devel openssl-devel readline-devel libdb-devel
|
||||
BuildRequires: zlib-devel libzstd-devel xz-devel bzip2-devel libarchive-devel ima-evm-utils-devel
|
||||
BuildRequires: dbus-devel fakechroot elfutils-devel elfutils-libelf-devel ima-evm-utils
|
||||
@ -272,6 +296,12 @@ make check || (cat tests/rpmtests.log; exit 0)
|
||||
%{_mandir}/man1/gendiff.1*
|
||||
|
||||
%changelog
|
||||
* Mon Jan 11 2021 Liquor <lirui130@huawei.com> - 4.15.1-21
|
||||
- Type:enhancement
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:backport patches from upstream
|
||||
|
||||
* Thu Dec 17 2020 Anakin Zhang <benjamin93@163.com> - 4.15.1-20
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user