diff --git a/SOURCES/glibc-RHEL-13720-1.patch b/SOURCES/glibc-RHEL-13720-1.patch
new file mode 100644
index 0000000..5eab70c
--- /dev/null
+++ b/SOURCES/glibc-RHEL-13720-1.patch
@@ -0,0 +1,72 @@
+commit 2aa0974d2573441bffd596b07bff8698b1f2f18c
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri Oct 20 14:29:50 2023 +0200
+
+    elf: ldconfig should skip temporary files created by package managers
+    
+    This avoids crashes due to partially written files, after a package
+    update is interrupted.
+    
+    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+Conflicts:
+	elf/ldconfig.c
+	  (missing alloca removal downstream)
+
+diff --git a/elf/ldconfig.c b/elf/ldconfig.c
+index 8c66d7e5426d8cc4..51de08f91fbaf093 100644
+--- a/elf/ldconfig.c
++++ b/elf/ldconfig.c
+@@ -771,6 +771,31 @@ struct dlib_entry
+   struct dlib_entry *next;
+ };
+ 
++/* Skip some temporary DSO files.  These files may be partially written
++   and lead to ldconfig crashes when examined.  */
++static bool
++skip_dso_based_on_name (const char *name, size_t len)
++{
++  /* Skip temporary files created by the prelink program.  Files with
++     names like these are never really DSOs we want to look at.  */
++  if (len >= sizeof (".#prelink#") - 1)
++    {
++      if (strcmp (name + len - sizeof (".#prelink#") + 1,
++		  ".#prelink#") == 0)
++	return true;
++      if (len >= sizeof (".#prelink#.XXXXXX") - 1
++	  && memcmp (name + len - sizeof (".#prelink#.XXXXXX")
++		     + 1, ".#prelink#.", sizeof (".#prelink#.") - 1) == 0)
++	return true;
++    }
++  /* Skip temporary files created by RPM.  */
++  if (memchr (name, len, ';') != NULL)
++    return true;
++  /* Skip temporary files created by dpkg.  */
++  if (len > 4 && memcmp (name + len - 4, ".tmp", 4) == 0)
++    return true;
++  return false;
++}
+ 
+ static void
+ search_dir (const struct dir_entry *entry)
+@@ -849,18 +874,8 @@ search_dir (const struct dir_entry *entry)
+ 	continue;
+ 
+       size_t len = strlen (direntry->d_name);
+-      /* Skip temporary files created by the prelink program.  Files with
+-	 names like these are never really DSOs we want to look at.  */
+-      if (len >= sizeof (".#prelink#") - 1)
+-	{
+-	  if (strcmp (direntry->d_name + len - sizeof (".#prelink#") + 1,
+-		      ".#prelink#") == 0)
+-	    continue;
+-	  if (len >= sizeof (".#prelink#.XXXXXX") - 1
+-	      && memcmp (direntry->d_name + len - sizeof (".#prelink#.XXXXXX")
+-			 + 1, ".#prelink#.", sizeof (".#prelink#.") - 1) == 0)
+-	    continue;
+-	}
++      if (skip_dso_based_on_name (direntry->d_name, len))
++	continue;
+       len += strlen (entry->path) + 2;
+       if (len > file_name_len)
+ 	{
diff --git a/SOURCES/glibc-RHEL-13720-2.patch b/SOURCES/glibc-RHEL-13720-2.patch
new file mode 100644
index 0000000..69d5a90
--- /dev/null
+++ b/SOURCES/glibc-RHEL-13720-2.patch
@@ -0,0 +1,61 @@
+commit cfb5a97a93ea656e3b2263e42142a4032986d9ba
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon Oct 23 12:53:16 2023 +0200
+
+    ldconfig: Fixes for skipping temporary files.
+    
+    Arguments to a memchr call were swapped, causing incorrect skipping
+    of files.
+    
+    Files related to dpkg have different names: they actually end in
+    .dpkg-new and .dpkg-tmp, not .tmp as I mistakenly assumed.
+    
+    Fixes commit 2aa0974d2573441bffd59 ("elf: ldconfig should skip
+    temporary files created by package managers").
+
+diff --git a/elf/ldconfig.c b/elf/ldconfig.c
+index 51de08f91fbaf093..fb19dd68d41c07a4 100644
+--- a/elf/ldconfig.c
++++ b/elf/ldconfig.c
+@@ -771,6 +771,17 @@ struct dlib_entry
+   struct dlib_entry *next;
+ };
+ 
++/* Return true if the N bytes at NAME end with with the characters in
++   the string SUFFIX.  (NAME[N + 1] does not have to be a null byte.)
++   Expected to be called with a string literal for SUFFIX.  */
++static inline bool
++endswithn (const char *name, size_t n, const char *suffix)
++{
++  return (n >= strlen (suffix)
++	  && memcmp (name + n - strlen (suffix), suffix,
++		     strlen (suffix)) == 0);
++}
++
+ /* Skip some temporary DSO files.  These files may be partially written
+    and lead to ldconfig crashes when examined.  */
+ static bool
+@@ -780,8 +791,7 @@ skip_dso_based_on_name (const char *name, size_t len)
+      names like these are never really DSOs we want to look at.  */
+   if (len >= sizeof (".#prelink#") - 1)
+     {
+-      if (strcmp (name + len - sizeof (".#prelink#") + 1,
+-		  ".#prelink#") == 0)
++      if (endswithn (name, len, ".#prelink#"))
+ 	return true;
+       if (len >= sizeof (".#prelink#.XXXXXX") - 1
+ 	  && memcmp (name + len - sizeof (".#prelink#.XXXXXX")
+@@ -789,10 +799,11 @@ skip_dso_based_on_name (const char *name, size_t len)
+ 	return true;
+     }
+   /* Skip temporary files created by RPM.  */
+-  if (memchr (name, len, ';') != NULL)
++  if (memchr (name, ';', len) != NULL)
+     return true;
+   /* Skip temporary files created by dpkg.  */
+-  if (len > 4 && memcmp (name + len - 4, ".tmp", 4) == 0)
++  if (endswithn (name, len, ".dpkg-new")
++      || endswithn (name, len, ".dpkg-tmp"))
+     return true;
+   return false;
+ }
diff --git a/SOURCES/glibc-RHEL-15867.patch b/SOURCES/glibc-RHEL-15867.patch
new file mode 100644
index 0000000..7df2fb8
--- /dev/null
+++ b/SOURCES/glibc-RHEL-15867.patch
@@ -0,0 +1,47 @@
+commit 2337e04e21ba6040926ec871e403533f77043c40
+Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
+Date:   Thu Feb 2 07:49:02 2023 -0500
+
+    cdefs: Limit definition of fortification macros
+    
+    Define the __glibc_fortify and other macros only when __FORTIFY_LEVEL >
+    0.  This has the effect of not defining these macros on older C90
+    compilers that do not have support for variable length argument lists.
+    
+    Also trim off the trailing backslashes from the definition of
+    __glibc_fortify and __glibc_fortify_n macros.
+    
+    Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
+    Reviewed-by: Florian Weimer <fweimer@redhat.com>
+
+diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
+index f3d7efdd2a9320f7..46ec4ef71e14c569 100644
+--- a/misc/sys/cdefs.h
++++ b/misc/sys/cdefs.h
+@@ -133,6 +133,7 @@
+ # define __glibc_objsize(__o) __bos (__o)
+ #endif
+ 
++#if __USE_FORTIFY_LEVEL > 0
+ /* Compile time conditions to choose between the regular, _chk and _chk_warn
+    variants.  These conditions should get evaluated to constant and optimized
+    away.  */
+@@ -168,7 +169,7 @@
+    ? __ ## f ## _alias (__VA_ARGS__)					      \
+    : (__glibc_unsafe_len (__l, __s, __osz)				      \
+       ? __ ## f ## _chk_warn (__VA_ARGS__, __osz)			      \
+-      : __ ## f ## _chk (__VA_ARGS__, __osz)))			      \
++      : __ ## f ## _chk (__VA_ARGS__, __osz)))
+ 
+ /* Fortify function f, where object size argument passed to f is the number of
+    elements and not total size.  */
+@@ -178,7 +179,8 @@
+    ? __ ## f ## _alias (__VA_ARGS__)					      \
+    : (__glibc_unsafe_len (__l, __s, __osz)				      \
+       ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s))		      \
+-      : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s))))		      \
++      : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s))))
++#endif
+ 
+ #if __GNUC_PREREQ (4,3)
+ # define __warndecl(name, msg) \
diff --git a/SPECS/glibc.spec b/SPECS/glibc.spec
index 328d3ec..69840ab 100644
--- a/SPECS/glibc.spec
+++ b/SPECS/glibc.spec
@@ -1,6 +1,6 @@
 %define glibcsrcdir glibc-2.28
 %define glibcversion 2.28
-%define glibcrelease 244%{?dist}
+%define glibcrelease 246%{?dist}
 # Pre-release tarballs are pulled in from git using a command that is
 # effectively:
 #
@@ -1058,6 +1058,9 @@ Patch870: glibc-RHEL-2122.patch
 Patch871: glibc-RHEL-1192.patch
 Patch872: glibc-RHEL-3639.patch
 Patch873: glibc-RHEL-10481.patch
+Patch874: glibc-RHEL-13720-1.patch
+Patch875: glibc-RHEL-13720-2.patch
+Patch876: glibc-RHEL-15867.patch
 
 # Intel Optimizations
 Patch10001: glibc-sw24097-1.patch
@@ -3004,6 +3007,12 @@ fi
 %files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
 
 %changelog
+* Fri Nov 24 2023 Florian Weimer <fweimer@redhat.com> - 2.28-246
+- Restore <sys/cdefs.h> compatibility with C90 compilers (RHEL-15867)
+
+* Tue Nov 21 2023 Florian Weimer <fweimer@redhat.com> - 2.28-245
+- ldconfig should skip temporary files created by RPM (RHEL-13720)
+
 * Mon Nov 20 2023 Florian Weimer <fweimer@redhat.com> - 2.28-244
 - Fix force-first handling in dlclose (RHEL-10481)