diff --git a/0001-Stop-on-first-failure-when-trying-to-open-a-database.patch b/0001-Stop-on-first-failure-when-trying-to-open-a-database.patch
new file mode 100644
index 0000000..146ed23
--- /dev/null
+++ b/0001-Stop-on-first-failure-when-trying-to-open-a-database.patch
@@ -0,0 +1,29 @@
+From fd054a40b2ba005571455d749de0423975e77651 Mon Sep 17 00:00:00 2001
+Message-Id: <fd054a40b2ba005571455d749de0423975e77651.1606726599.git.pmatilai@redhat.com>
+From: Panu Matilainen <pmatilai@redhat.com>
+Date: Wed, 18 Nov 2020 13:56:14 +0200
+Subject: [PATCH 1/2] Stop on first failure when trying to open a database
+ (RhBug:1898301)
+
+If an index open fails there's no point trying to go on, things are
+not going to work and at least BDB will segfault in some cases...
+---
+ lib/rpmdb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/rpmdb.c b/lib/rpmdb.c
+index 874f07911..41da9da71 100644
+--- a/lib/rpmdb.c
++++ b/lib/rpmdb.c
+@@ -355,7 +355,7 @@ static int doOpen(rpmdb db, int justPkgs)
+ {
+     int rc = pkgdbOpen(db, db->db_flags, NULL);
+     if (!justPkgs) {
+-	for (int dbix = 0; dbix < db->db_ndbi; dbix++) {
++	for (int dbix = 0; rc == 0 && dbix < db->db_ndbi; dbix++) {
+ 	    rc += indexOpen(db, db->db_tags[dbix], db->db_flags, NULL);
+ 	}
+     }
+-- 
+2.28.0
+
diff --git a/0002-Only-attempt-loading-the-keyring-once-the-rpmdb-is-o.patch b/0002-Only-attempt-loading-the-keyring-once-the-rpmdb-is-o.patch
new file mode 100644
index 0000000..f934e44
--- /dev/null
+++ b/0002-Only-attempt-loading-the-keyring-once-the-rpmdb-is-o.patch
@@ -0,0 +1,42 @@
+From 3cb955b77f07c70ba01d765aa6377908847608f5 Mon Sep 17 00:00:00 2001
+Message-Id: <3cb955b77f07c70ba01d765aa6377908847608f5.1606726599.git.pmatilai@redhat.com>
+In-Reply-To: <fd054a40b2ba005571455d749de0423975e77651.1606726599.git.pmatilai@redhat.com>
+References: <fd054a40b2ba005571455d749de0423975e77651.1606726599.git.pmatilai@redhat.com>
+From: Panu Matilainen <pmatilai@redhat.com>
+Date: Mon, 23 Nov 2020 13:46:14 +0200
+Subject: [PATCH 2/2] Only attempt loading the keyring once the rpmdb is open
+
+When we do lazy rpmdb open in rpmtsInitIterator(), we also do a lazy
+keyring open. Except that since the keyring typically lives in the rpmdb,
+we PROBABLY should try open the database first. One of those "WTF I've
+been smoking" moments, lol.
+
+Prevents an ugly if mostly harmless double error anything we can't open
+the database for one reason or another.
+---
+ lib/rpmts.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/rpmts.c b/lib/rpmts.c
+index 9fa9cb0e2..8c8ae420a 100644
+--- a/lib/rpmts.c
++++ b/lib/rpmts.c
+@@ -177,12 +177,12 @@ rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmDbiTagVal rpmtag,
+     if (ts == NULL)
+ 	return NULL;
+ 
+-    if (ts && ts->keyring == NULL)
+-	loadKeyring(ts);
+-
+     if (ts->rdb == NULL && rpmtsOpenDB(ts, ts->dbmode))
+ 	return NULL;
+ 
++    if (ts->keyring == NULL)
++	loadKeyring(ts);
++
+     /* Parse out "N(EVR)" tokens from a label key if present */
+     if (rpmtag == RPMDBI_LABEL && keyp != NULL && strchr(keyp, '(')) {
+ 	const char *se, *s = keyp;
+-- 
+2.28.0
+
diff --git a/rpm.spec b/rpm.spec
index 46137f3..2e9a888 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -25,7 +25,7 @@
 
 %global rpmver 4.16.0
 #global snapver rc1
-%global rel 3
+%global rel 4
 
 %global srcver %{rpmver}%{?snapver:-%{snapver}}
 %global srcdir %{?snapver:testing}%{!?snapver:rpm-%(echo %{rpmver} | cut -d'.' -f1-2).x}
@@ -60,6 +60,8 @@ Patch6: 0001-find-debuginfo.sh-decompress-DWARF-compressed-ELF-se.patch
 Patch7: 0001-Issue-deprecation-warning-when-creating-BDB-database.patch
 
 # Patches already upstream:
+Patch100: 0001-Stop-on-first-failure-when-trying-to-open-a-database.patch
+Patch101: 0002-Only-attempt-loading-the-keyring-once-the-rpmdb-is-o.patch
 
 # These are not yet upstream
 Patch906: rpm-4.7.1-geode-i686.patch
@@ -553,6 +555,10 @@ fi
 %doc doc/librpm/html/*
 
 %changelog
+* Mon Nov 30 2020 Panu Matilainen <pmatilai@redhat.com> - 4.16.0-4
+- Fix BDB crashing on failed open attempts (#1902395, #1898299, #1900407)
+- Fix unnecessary double failure on lazy keyring open
+
 * Wed Oct 28 2020 Panu Matilainen <pmatilai@redhat.com> - 4.16.0-3
 - Issue deprecation warning when creating BDB databases (#1787311)
 - Temporarily disable test-suite due to massive fakechroot breakage