diff --git a/SOURCES/0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch b/SOURCES/0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch
index 78cceb6..00eef59 100644
--- a/SOURCES/0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch
+++ b/SOURCES/0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch
@@ -1,4 +1,4 @@
-From ca745cdfc27b83b6bcef9f856d858a68c64429de Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Peter Jones <pjones@redhat.com>
 Date: Tue, 8 Apr 2014 15:28:12 -0400
 Subject: [PATCH] Add "install-all target" to top side of HAVE_FIRMWARE.
@@ -8,7 +8,7 @@ Subject: [PATCH] Add "install-all target" to top side of HAVE_FIRMWARE.
  1 file changed, 10 insertions(+)
 
 diff --git a/Makefile b/Makefile
-index b472945..6606d31 100644
+index b472945b..6606d319 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -275,6 +275,16 @@ efi64:
@@ -28,5 +28,3 @@ index b472945..6606d31 100644
  else # FIRMWARE
  
  all: all-local subdirs
--- 
-2.5.5
diff --git a/SOURCES/0002-ext4-64bit-feature.patch b/SOURCES/0002-ext4-64bit-feature.patch
deleted file mode 100644
index 9efe878..0000000
--- a/SOURCES/0002-ext4-64bit-feature.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From af7e95c32cea40c1e443ae301e64b27f068b4915 Mon Sep 17 00:00:00 2001
-From: Paulo Alcantara <pcacjr@zytor.com>
-Date: Wed, 11 Oct 2017 07:00:31 -0400
-Subject: [PATCH] ext4: Fix 64bit feature
-
-As per ext4 specification:
-
-> In ext2, ext3, and ext4 (when the 64bit feature is not enabled), the
-> block group descriptor was only 32 bytes long and therefore ends at
-> bg_checksum. On an ext4 filesystem with the 64bit feature enabled, the
-> block group descriptor expands to at least the 64 bytes described below;
-> the size is stored in the superblock.
-
-Since block group descriptor has been expanded to 64 bytes long (when 64
-bit feature is enabled), we cannot index ext2_group_desc and return it
-*directly* -- as we did it in ext2_get_group_desc -- it's still 32 bytes
-long.
-
-Instead, use s_desc_size field from superblock to correctly index and
-return block group descriptors.
-
-Cc: H. Peter Anvin <hpa@zytor.com>
-Cc: Gene Cumm <gene.cumm@gmail.com>
-Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
----
- core/fs/ext2/ext2.c    | 23 ++++++++++++++---------
- core/fs/ext2/ext2_fs.h |  1 +
- 2 files changed, 15 insertions(+), 9 deletions(-)
-
-diff --git a/core/fs/ext2/ext2.c b/core/fs/ext2/ext2.c
-index 76bd1d5..4bc0a53 100644
---- a/core/fs/ext2/ext2.c
-+++ b/core/fs/ext2/ext2.c
-@@ -25,22 +25,17 @@ static enum dirent_type ext2_cvt_type(unsigned int d_file_type)
- 	return inode_type[d_file_type];
- }
- 
--/*
-- * get the group's descriptor of group_num
-- */
--static const struct ext2_group_desc *
--ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
-+static const void *__ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
- {
-     struct ext2_sb_info *sbi = EXT2_SB(fs);
-     uint32_t desc_block, desc_index;
--    const struct ext2_group_desc *desc_data_block;
-+    uint8_t *p;
- 
-     if (group_num >= sbi->s_groups_count) {
- 	printf ("ext2_get_group_desc"
- 		"block_group >= groups_count - "
- 		"block_group = %d, groups_count = %d",
- 		group_num, sbi->s_groups_count);
--
- 	return NULL;
-     }
- 
-@@ -49,8 +44,17 @@ ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
- 
-     desc_block += sbi->s_first_data_block + 1;
- 
--    desc_data_block = get_cache(fs->fs_dev, desc_block);
--    return &desc_data_block[desc_index];
-+    p = get_cache(fs->fs_dev, desc_block);
-+    return p + sbi->s_desc_size * desc_index;
-+}
-+
-+/*
-+ * get the group's descriptor of group_num
-+ */
-+static inline const struct ext2_group_desc *
-+ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
-+{
-+    return __ext2_get_group_desc(fs, group_num);
- }
- 
- /*
-@@ -306,6 +310,7 @@ static int ext2_fs_init(struct fs_info *fs)
-     if (sb.s_desc_size < sizeof(struct ext2_group_desc))
- 	sb.s_desc_size = sizeof(struct ext2_group_desc);
-     sbi->s_desc_per_block   = BLOCK_SIZE(fs) / sb.s_desc_size;
-+    sbi->s_desc_size = sb.s_desc_size;
-     sbi->s_groups_count     = (sb.s_blocks_count - sb.s_first_data_block
- 			       + EXT2_BLOCKS_PER_GROUP(fs) - 1)
- 	                      / EXT2_BLOCKS_PER_GROUP(fs);
-diff --git a/core/fs/ext2/ext2_fs.h b/core/fs/ext2/ext2_fs.h
-index 803a995..d8d07eb 100644
---- a/core/fs/ext2/ext2_fs.h
-+++ b/core/fs/ext2/ext2_fs.h
-@@ -278,6 +278,7 @@ struct ext2_sb_info {
-     uint32_t s_first_data_block;	/* First Data Block */
-     int      s_inode_size;
-     uint8_t  s_uuid[16];	/* 128-bit uuid for volume */
-+    int      s_desc_size;	/* size of group descriptor */
- };
- 
- static inline struct ext2_sb_info *EXT2_SB(struct fs_info *fs)
--- 
-2.7.4.GIT
-
diff --git a/SOURCES/0002-ext4-Fix-64bit-feature.patch b/SOURCES/0002-ext4-Fix-64bit-feature.patch
new file mode 100644
index 0000000..4989bcd
--- /dev/null
+++ b/SOURCES/0002-ext4-Fix-64bit-feature.patch
@@ -0,0 +1,98 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Paulo Alcantara <pcacjr@zytor.com>
+Date: Wed, 11 Oct 2017 07:00:31 -0400
+Subject: [PATCH] ext4: Fix 64bit feature
+
+As per ext4 specification:
+
+> In ext2, ext3, and ext4 (when the 64bit feature is not enabled), the
+> block group descriptor was only 32 bytes long and therefore ends at
+> bg_checksum. On an ext4 filesystem with the 64bit feature enabled, the
+> block group descriptor expands to at least the 64 bytes described below;
+> the size is stored in the superblock.
+
+Since block group descriptor has been expanded to 64 bytes long (when 64
+bit feature is enabled), we cannot index ext2_group_desc and return it
+*directly* -- as we did it in ext2_get_group_desc -- it's still 32 bytes
+long.
+
+Instead, use s_desc_size field from superblock to correctly index and
+return block group descriptors.
+
+Cc: H. Peter Anvin <hpa@zytor.com>
+Cc: Gene Cumm <gene.cumm@gmail.com>
+Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
+---
+ core/fs/ext2/ext2.c    | 23 ++++++++++++++---------
+ core/fs/ext2/ext2_fs.h |  1 +
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/core/fs/ext2/ext2.c b/core/fs/ext2/ext2.c
+index 76bd1d5a..4bc0a535 100644
+--- a/core/fs/ext2/ext2.c
++++ b/core/fs/ext2/ext2.c
+@@ -25,22 +25,17 @@ static enum dirent_type ext2_cvt_type(unsigned int d_file_type)
+ 	return inode_type[d_file_type];
+ }
+ 
+-/*
+- * get the group's descriptor of group_num
+- */
+-static const struct ext2_group_desc *
+-ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
++static const void *__ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
+ {
+     struct ext2_sb_info *sbi = EXT2_SB(fs);
+     uint32_t desc_block, desc_index;
+-    const struct ext2_group_desc *desc_data_block;
++    uint8_t *p;
+ 
+     if (group_num >= sbi->s_groups_count) {
+ 	printf ("ext2_get_group_desc"
+ 		"block_group >= groups_count - "
+ 		"block_group = %d, groups_count = %d",
+ 		group_num, sbi->s_groups_count);
+-
+ 	return NULL;
+     }
+ 
+@@ -49,8 +44,17 @@ ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
+ 
+     desc_block += sbi->s_first_data_block + 1;
+ 
+-    desc_data_block = get_cache(fs->fs_dev, desc_block);
+-    return &desc_data_block[desc_index];
++    p = get_cache(fs->fs_dev, desc_block);
++    return p + sbi->s_desc_size * desc_index;
++}
++
++/*
++ * get the group's descriptor of group_num
++ */
++static inline const struct ext2_group_desc *
++ext2_get_group_desc(struct fs_info *fs, uint32_t group_num)
++{
++    return __ext2_get_group_desc(fs, group_num);
+ }
+ 
+ /*
+@@ -306,6 +310,7 @@ static int ext2_fs_init(struct fs_info *fs)
+     if (sb.s_desc_size < sizeof(struct ext2_group_desc))
+ 	sb.s_desc_size = sizeof(struct ext2_group_desc);
+     sbi->s_desc_per_block   = BLOCK_SIZE(fs) / sb.s_desc_size;
++    sbi->s_desc_size = sb.s_desc_size;
+     sbi->s_groups_count     = (sb.s_blocks_count - sb.s_first_data_block
+ 			       + EXT2_BLOCKS_PER_GROUP(fs) - 1)
+ 	                      / EXT2_BLOCKS_PER_GROUP(fs);
+diff --git a/core/fs/ext2/ext2_fs.h b/core/fs/ext2/ext2_fs.h
+index 803a9954..d8d07ebd 100644
+--- a/core/fs/ext2/ext2_fs.h
++++ b/core/fs/ext2/ext2_fs.h
+@@ -278,6 +278,7 @@ struct ext2_sb_info {
+     uint32_t s_first_data_block;	/* First Data Block */
+     int      s_inode_size;
+     uint8_t  s_uuid[16];	/* 128-bit uuid for volume */
++    int      s_desc_size;	/* size of group descriptor */
+ };
+ 
+ static inline struct ext2_sb_info *EXT2_SB(struct fs_info *fs)
diff --git a/SOURCES/0003-extlinux-fix-missing-include-for-major-minor.patch b/SOURCES/0003-extlinux-fix-missing-include-for-major-minor.patch
deleted file mode 100644
index c98ec5f..0000000
--- a/SOURCES/0003-extlinux-fix-missing-include-for-major-minor.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From f2bad087b524546d349c79e62ea8f6a1306d800a Mon Sep 17 00:00:00 2001
-From: Peter Jones <pjones@redhat.com>
-Date: Fri, 10 Aug 2018 05:03:38 -0400
-Subject: [PATCH] extlinux: fix missing include for major()/minor()
-
-Resolves: rhbz#1611751
-
-Signed-off-by: Peter Jones <syslinux-owner@fedoraproject.org>
----
- extlinux/main.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/extlinux/main.c b/extlinux/main.c
-index a7ebd49a948..69bb1644547 100644
---- a/extlinux/main.c
-+++ b/extlinux/main.c
-@@ -41,6 +41,7 @@
- #include <sys/types.h>
- #include <sys/mount.h>
- #include <sys/vfs.h>
-+#include <sys/sysmacros.h>
- 
- #include "linuxioctl.h"
- 
--- 
-2.17.1
-
diff --git a/SOURCES/0003-extlinux-pull-in-sys-sysmacros.h-for-major-minor-mak.patch b/SOURCES/0003-extlinux-pull-in-sys-sysmacros.h-for-major-minor-mak.patch
new file mode 100644
index 0000000..406d25e
--- /dev/null
+++ b/SOURCES/0003-extlinux-pull-in-sys-sysmacros.h-for-major-minor-mak.patch
@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Tue, 19 Apr 2016 06:50:31 -0400
+Subject: [PATCH] extlinux: pull in sys/sysmacros.h for major/minor/makedev
+
+These functions are defined in sys/sysmacros.h, so add the include to
+main.c.  This is already handled correctly in mountinfo.c.  Otherwise
+we get build failures like:
+
+main.o: In function 'find_device_sysfs':
+extlinux/main.c:1131: undefined reference to 'minor'
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
+---
+ extlinux/main.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/extlinux/main.c b/extlinux/main.c
+index a7ebd49a..ebff7eae 100644
+--- a/extlinux/main.c
++++ b/extlinux/main.c
+@@ -38,6 +38,7 @@
+ #include <sysexits.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
++#include <sys/sysmacros.h>
+ #include <sys/types.h>
+ #include <sys/mount.h>
+ #include <sys/vfs.h>
diff --git a/SOURCES/0004-Add-RPMOPTFLAGS-to-CFLAGS-for-some-stuff.patch b/SOURCES/0004-Add-RPMOPTFLAGS-to-CFLAGS-for-some-stuff.patch
index e55c490..ab35dbc 100644
--- a/SOURCES/0004-Add-RPMOPTFLAGS-to-CFLAGS-for-some-stuff.patch
+++ b/SOURCES/0004-Add-RPMOPTFLAGS-to-CFLAGS-for-some-stuff.patch
@@ -1,4 +1,4 @@
-From 5c24d725d5a5f50f0544fbcc544f08a3f9e90e5d Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Peter Jones <pjones@redhat.com>
 Date: Thu, 8 Aug 2019 05:41:36 -0400
 Subject: [PATCH] Add 'RPMOPTFLAGS' to CFLAGS for some stuff.
@@ -11,7 +11,7 @@ Subject: [PATCH] Add 'RPMOPTFLAGS' to CFLAGS for some stuff.
  4 files changed, 8 insertions(+), 8 deletions(-)
 
 diff --git a/extlinux/Makefile b/extlinux/Makefile
-index 1721ee54aff..d504e23133e 100644
+index 1721ee54..d504e231 100644
 --- a/extlinux/Makefile
 +++ b/extlinux/Makefile
 @@ -18,9 +18,9 @@ include $(MAKEDIR)/syslinux.mk
@@ -27,7 +27,7 @@ index 1721ee54aff..d504e23133e 100644
  SRCS     = main.c \
  	   mountinfo.c \
 diff --git a/linux/Makefile b/linux/Makefile
-index 5a49d813de1..9fed68d02c6 100644
+index 5a49d813..9fed68d0 100644
 --- a/linux/Makefile
 +++ b/linux/Makefile
 @@ -18,8 +18,8 @@ include $(MAKEDIR)/syslinux.mk
@@ -42,7 +42,7 @@ index 5a49d813de1..9fed68d02c6 100644
  SRCS     = syslinux.c \
  	   ../libinstaller/syslxopt.c \
 diff --git a/mtools/Makefile b/mtools/Makefile
-index 632b185ba2f..b6e5ebdba6b 100755
+index 632b185b..b6e5ebdb 100755
 --- a/mtools/Makefile
 +++ b/mtools/Makefile
 @@ -2,8 +2,8 @@ include $(MAKEDIR)/syslinux.mk
@@ -57,7 +57,7 @@ index 632b185ba2f..b6e5ebdba6b 100755
  SRCS     = syslinux.c \
  	   ../libinstaller/fs.c \
 diff --git a/utils/Makefile b/utils/Makefile
-index dfe625902ce..b4962353f20 100644
+index dfe62590..b4962353 100644
 --- a/utils/Makefile
 +++ b/utils/Makefile
 @@ -17,8 +17,8 @@
@@ -71,6 +71,3 @@ index dfe625902ce..b4962353f20 100644
  
  C_TARGETS	 = isohybrid gethostip memdiskfind
  SCRIPT_TARGETS	 = mkdiskimage
--- 
-2.21.0
-
diff --git a/SOURCES/0005-Workaround-multiple-definition-of-symbol-errors.patch b/SOURCES/0005-Workaround-multiple-definition-of-symbol-errors.patch
new file mode 100644
index 0000000..9bfd247
--- /dev/null
+++ b/SOURCES/0005-Workaround-multiple-definition-of-symbol-errors.patch
@@ -0,0 +1,106 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Merlin Mathesius <mmathesi@redhat.com>
+Date: Wed, 13 May 2020 08:02:27 -0500
+Subject: [PATCH] Workaround multiple definition of symbol errors
+
+---
+ com32/cmenu/Makefile           | 2 +-
+ com32/elflink/ldlinux/Makefile | 2 +-
+ com32/gpllib/Makefile          | 2 +-
+ com32/hdt/Makefile             | 2 +-
+ core/Makefile                  | 2 +-
+ dos/Makefile                   | 2 +-
+ efi/Makefile                   | 2 +-
+ 7 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/com32/cmenu/Makefile b/com32/cmenu/Makefile
+index b81b68ed..2ae989c4 100644
+--- a/com32/cmenu/Makefile
++++ b/com32/cmenu/Makefile
+@@ -49,7 +49,7 @@ makeoutputdirs:
+ 	@mkdir -p $(OBJ)/libmenu
+ 
+ libmenu/libmenu.elf: $(LIBMENU)
+-	$(LD) -shared $(LDFLAGS) -soname $(patsubst %.elf,%.c32,$(@F)) \
++	$(LD) -shared $(LDFLAGS) -z muldefs -soname $(patsubst %.elf,%.c32,$(@F)) \
+ 		-o $@ $^
+ 
+ tidy dist:
+diff --git a/com32/elflink/ldlinux/Makefile b/com32/elflink/ldlinux/Makefile
+index 87c0d362..2be2a01a 100644
+--- a/com32/elflink/ldlinux/Makefile
++++ b/com32/elflink/ldlinux/Makefile
+@@ -33,7 +33,7 @@ endif
+ all: $(BTARGET) ldlinux_lnx.a
+ 
+ ldlinux.elf : $(OBJS)
+-	$(LD) $(LDFLAGS) -soname $(SONAME) -o $@ $^ $(LIBS)
++	$(LD) $(LDFLAGS) -z muldefs -soname $(SONAME) -o $@ $^ $(LIBS)
+ 
+ LNXCFLAGS += -D__export='__attribute__((visibility("default")))'
+ LNXLIBOBJS = get_key.lo
+diff --git a/com32/gpllib/Makefile b/com32/gpllib/Makefile
+index 1fec9145..2d764d0b 100644
+--- a/com32/gpllib/Makefile
++++ b/com32/gpllib/Makefile
+@@ -24,7 +24,7 @@ makeoutputdirs:
+ 		$(addprefix $(OBJ),$(sort $(dir $(LIBOBJS)))),$(b))
+ 
+ libgpl.elf : $(LIBOBJS)
+-	$(LD) -shared $(LDFLAGS) -soname $(patsubst %.elf,%.c32,$(@F)) -o $@ $^
++	$(LD) -shared $(LDFLAGS) -z muldefs -soname $(patsubst %.elf,%.c32,$(@F)) -o $@ $^
+ 
+ tidy dist clean:
+ 	find . \( -name \*.o -o -name .\*.d -o -name \*.tmp \) -print0 | \
+diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile
+index 61736d05..1d947857 100644
+--- a/com32/hdt/Makefile
++++ b/com32/hdt/Makefile
+@@ -52,7 +52,7 @@ QEMU			?= qemu-kvm
+ all: $(MODULES) $(TESTFILES)
+ 
+ hdt.elf : $(OBJS) $(LIBS) $(C_LIBS)
+-	$(LD) $(LDFLAGS) -o $@ $^
++	$(LD) $(LDFLAGS) -z muldefs -o $@ $^
+ 
+ memtest:
+ 	-[ ! -f $(FLOPPY_DIR)/$(MEMTEST) ] && $(WGET) $(MEMTEST_URL) -O $(FLOPPY_DIR)/$(MEMTEST)
+diff --git a/core/Makefile b/core/Makefile
+index 46cb037c..f0cfcbe9 100644
+--- a/core/Makefile
++++ b/core/Makefile
+@@ -156,7 +156,7 @@ LDSCRIPT = $(SRC)/$(ARCH)/syslinux.ld
+ NASM_ELF = elf
+ 
+ %.elf: %.o $(LIBDEP) $(LDSCRIPT) $(AUXLIBS)
+-	$(LD) $(LDFLAGS) -pie -Bsymbolic \
++	$(LD) $(LDFLAGS) -z muldefs -pie -Bsymbolic \
+ 		-T $(LDSCRIPT) \
+ 		--unresolved-symbols=report-all \
+ 		-E --hash-style=gnu -M -o $@ $< \
+diff --git a/dos/Makefile b/dos/Makefile
+index 4c930d19..5d1c72ca 100644
+--- a/dos/Makefile
++++ b/dos/Makefile
+@@ -19,7 +19,7 @@ include $(MAKEDIR)/embedded.mk
+ CFLAGS	+= -D__MSDOS__ -mregparm=3 -DREGPARM=3
+ # CFLAGS  += -DDEBUG
+ 
+-LDFLAGS	 = -T $(SRC)/dosexe.ld
++LDFLAGS	 = -T $(SRC)/dosexe.ld -z muldefs
+ OPTFLAGS = -g
+ INCLUDES = -include code16.h -nostdinc -iwithprefix include \
+ 	   -I$(SRC) -I$(SRC)/.. -I$(SRC)/../libfat \
+diff --git a/efi/Makefile b/efi/Makefile
+index bbf23f24..3dd922d5 100644
+--- a/efi/Makefile
++++ b/efi/Makefile
+@@ -69,7 +69,7 @@ $(OBJS): | $(OBJ)/$(ARCH)
+ BTARGET  = syslinux.efi
+ 
+ syslinux.so: $(OBJS) $(CORE_OBJS) $(LIB_OBJS)
+-	$(LD) $(LDFLAGS) --strip-debug -o $@ $^ -lgnuefi -lefi
++	$(LD) $(LDFLAGS) -z muldefs --strip-debug -o $@ $^ -lgnuefi -lefi
+ 
+ # We need to rename the .hash section because the EFI firmware
+ # linker really doesn't like it.
diff --git a/SOURCES/0006-Replace-builtin-strlen-that-appears-to-get-optimized.patch b/SOURCES/0006-Replace-builtin-strlen-that-appears-to-get-optimized.patch
new file mode 100644
index 0000000..80e530e
--- /dev/null
+++ b/SOURCES/0006-Replace-builtin-strlen-that-appears-to-get-optimized.patch
@@ -0,0 +1,37 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Merlin Mathesius <mmathesi@redhat.com>
+Date: Wed, 13 May 2020 11:58:37 -0500
+Subject: [PATCH] Replace builtin strlen that appears to get optimized away
+
+---
+ dos/string.h | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/dos/string.h b/dos/string.h
+index f648de2d..407d0233 100644
+--- a/dos/string.h
++++ b/dos/string.h
+@@ -5,12 +5,22 @@
+ #ifndef _STRING_H
+ #define _STRING_H
+ 
++#include <stddef.h>
++
+ /* Standard routines */
+ #define memcpy(a,b,c)	__builtin_memcpy(a,b,c)
+ #define memmove(a,b,c)	__builtin_memmove(a,b,c)
+ #define memset(a,b,c)	__builtin_memset(a,b,c)
+ #define strcpy(a,b)	__builtin_strcpy(a,b)
+-#define strlen(a)	__builtin_strlen(a)
++#define strlen(a)	inline_strlen(a)
++
++/* replacement for builtin strlen that appears to get optimized away */
++static inline size_t inline_strlen(const char *str)
++{
++    size_t l;
++    for (l = 0; *str++; l++);
++    return l;
++}
+ 
+ /* This only returns true or false */
+ static inline int memcmp(const void *__m1, const void *__m2, unsigned int __n)
diff --git a/SOURCES/0007-Fix-backspace-when-editing-a-multiline-cmdline.patch b/SOURCES/0007-Fix-backspace-when-editing-a-multiline-cmdline.patch
new file mode 100644
index 0000000..d96df40
--- /dev/null
+++ b/SOURCES/0007-Fix-backspace-when-editing-a-multiline-cmdline.patch
@@ -0,0 +1,134 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Robbie Harwood <rharwood@redhat.com>
+Date: Thu, 21 Oct 2021 15:15:33 -0400
+Subject: [PATCH] Fix backspace when editing a multiline cmdline
+
+Once the cmdline had passed the width of the screen, adding additional
+characters introduced a spurious newline, and another newline at the
+width of input.  Furthermore, hitting backspace would not start
+redrawing at the end of input, but rather at the beginning of the
+current line - resulting in extra duplicate lines scrolling the console.
+
+First, fix the assumption that the length of cmdline is the width - it
+needs to include the length of the prompt (i.e., length of input and
+space).
+
+Second, fix the behavior of single-line redraw (i.e., redraw == 1) to
+move the cursor to the row the line begins at.
+
+Third, don't scroll the cursor down when a line wrap would occur - it's
+not necessary since line wrap is enabled, and results in the extra blank
+line.
+
+Finally, comment all used escape sequences so that I don't need to look
+them up again.
+
+Signed-off-by: Robbie Harwood <rharwood@redhat.com>
+---
+ com32/elflink/ldlinux/cli.c | 33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
+
+diff --git a/com32/elflink/ldlinux/cli.c b/com32/elflink/ldlinux/cli.c
+index 3119b11f..4913f038 100644
+--- a/com32/elflink/ldlinux/cli.c
++++ b/com32/elflink/ldlinux/cli.c
+@@ -135,6 +135,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+     struct cli_command *comm_counter = NULL;
+     clock_t kbd_to = kbdtimeout;
+     clock_t tto = totaltimeout;
++    int prompt_len = 1 + strlen(input);
+ 
+     if (!width) {
+ 	int height;
+@@ -144,7 +145,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+ 
+     len = cursor = 0;
+     prev_len = 0;
+-    x = y = 0;
++    y = 0;
+ 
+     /*
+      * Before we start messing with the x,y coordinates print 'input'
+@@ -152,6 +153,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+      * previously.
+      */
+     printf("%s ", input);
++    x = prompt_len;
+ 
+     while (!done) {
+ 	if (redraw > 1) {
+@@ -162,8 +164,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+ 	    if (pDraw_Menu)
+ 		    (*pDraw_Menu) (-1, top, 1);
+ 	    prev_len = 0;
+-	    printf("\033[2J\033[H");
+-	    // printf("\033[0m\033[2J\033[H");
++	    printf("\033[2J\033[H"); /* Clear entire screen; move to 0, 0. */
+ 	}
+ 
+ 	if (redraw > 0) {
+@@ -172,10 +173,14 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+ 	    prev_len = max(len, prev_len);
+ 
+ 	    /* Redraw the command line */
+-	    printf("\033[?25l");
+-	    printf("\033[1G%s ", input);
++	    printf("\033[?25l"); /* Hide cursor. */
++	    printf("\033[1G"); /* Column 1. */
++	    if (y > 0)
++		printf("\033[%dA", y); /* Directly up. */
+ 
+-	    x = strlen(input);
++	    printf("%s ", input);
++
++	    x = prompt_len;
+ 	    y = 0;
+ 	    at = 0;
+ 	    while (at < prev_len) {
+@@ -183,23 +188,22 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+ 		at++;
+ 		x++;
+ 		if (x >= width) {
+-		    printf("\r\n");
+ 		    x = 0;
+ 		    y++;
+ 		}
+ 	    }
+-	    printf("\033[K\r");
++	    printf("\033[K\r"); /* Clear to end of line; go to beginning. */
+ 
+-	    dy = y - (cursor + strlen(input) + 1) / width;
+-	    x = (cursor + strlen(input) + 1) % width;
++	    dy = y - (cursor + prompt_len) / width;
++	    x = (cursor + prompt_len) % width;
+ 
+ 	    if (dy) {
+-		printf("\033[%dA", dy);
++		printf("\033[%dA", dy); /* Cursor directly up. */
+ 		y -= dy;
+ 	    }
+ 	    if (x)
+-		printf("\033[%dC", x);
+-	    printf("\033[?25h");
++		printf("\033[%dC", x); /* Cursor forward. */
++	    printf("\033[?25h"); /* Show cursor. */
+ 	    prev_len = len;
+ 	    redraw = 0;
+ 	}
+@@ -439,7 +443,6 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+ 		    cursor++;
+ 		    x++;
+ 		    if (x >= width) {
+-			printf("\r\n\033[K");
+ 			y++;
+ 			x = 0;
+ 		    }
+@@ -459,7 +462,7 @@ const char *edit_cmdline(const char *input, int top /*, int width */ ,
+ 	}
+     }
+ 
+-    printf("\033[?7h");
++    printf("\033[?7h"); /* Enable line wrap. */
+ 
+     /* Add the command to the history if its length is larger than 0 */
+     len = strlen(ret);
diff --git a/SOURCES/syslinux.patches b/SOURCES/syslinux.patches
new file mode 100644
index 0000000..12581b2
--- /dev/null
+++ b/SOURCES/syslinux.patches
@@ -0,0 +1,7 @@
+Patch0001: 0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch
+Patch0002: 0002-ext4-Fix-64bit-feature.patch
+Patch0003: 0003-extlinux-pull-in-sys-sysmacros.h-for-major-minor-mak.patch
+Patch0004: 0004-Add-RPMOPTFLAGS-to-CFLAGS-for-some-stuff.patch
+Patch0005: 0005-Workaround-multiple-definition-of-symbol-errors.patch
+Patch0006: 0006-Replace-builtin-strlen-that-appears-to-get-optimized.patch
+Patch0007: 0007-Fix-backspace-when-editing-a-multiline-cmdline.patch
diff --git a/SPECS/syslinux.spec b/SPECS/syslinux.spec
index a7e047e..5a1d5ba 100644
--- a/SPECS/syslinux.spec
+++ b/SPECS/syslinux.spec
@@ -7,15 +7,14 @@ Summary: Simple kernel loader which boots from a FAT filesystem
 Name: syslinux
 Version: 6.04
 %define tarball_version 6.04-pre1
-Release: 5%{?dist}
+Release: 6%{?dist}
 License: GPLv2+
 Group: Applications/System
 URL: http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project
 Source0: http://www.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{tarball_version}.tar.xz
-Patch0001: 0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch
-Patch0002: 0002-ext4-64bit-feature.patch
-Patch0003: 0003-extlinux-fix-missing-include-for-major-minor.patch
-Patch0004: 0004-Add-RPMOPTFLAGS-to-CFLAGS-for-some-stuff.patch
+Source1: syslinux.patches
+
+%include %{SOURCE1}
 
 # this is to keep rpmbuild from thinking the .c32 / .com / .0 / memdisk files
 # in noarch packages are a reason to stop the build.
@@ -266,6 +265,10 @@ fi
 %endif
 
 %changelog
+* Wed Aug 03 2022 Robbie Harwood <rharwood@redhat.com> - 6.04-6
+- Sync with RHEL 9 / Fedora at their 6.04-0.20
+- Resolves: #1748014
+
 * Fri Nov 13 2020 Javier Martinez Canillas <javierm@redhat.com> - 6.04-5
 - Bump release to ship the syslinux-tftpboot subpackage on aarch64
   Resolves: rhbz#1870276