Fix the assembler's check that the output file is not also one of the input files.

Resolves: #1660279
This commit is contained in:
Nick Clifton 2019-01-30 11:53:06 +00:00
parent 263729c7ef
commit 8328d01902
2 changed files with 48 additions and 9 deletions

View File

@ -0,0 +1,37 @@
--- binutils.orig/gas/as.c 2019-01-30 11:02:04.055574300 +0000
+++ binutils-2.31.1/gas/as.c 2019-01-30 11:03:12.212050935 +0000
@@ -1254,14 +1254,27 @@ main (int argc, char ** argv)
{
struct stat sib;
- if (stat (argv[i], &sib) == 0)
+ /* Check that the input file and output file are different. */
+ if (stat (argv[i], &sib) == 0
+ && sib.st_ino == sob.st_ino
+ /* POSIX emulating systems may support stat() but if the
+ underlying file system does not support a file serial number
+ of some kind then they will return 0 for the inode. So
+ two files with an inode of 0 may not actually be the same.
+ On real POSIX systems no ordinary file will ever have an
+ inode of 0. */
+ && sib.st_ino != 0
+ /* Different files may have the same inode number if they
+ reside on different devices, so check the st_dev field as
+ well. */
+ && sib.st_dev == sob.st_dev)
{
- if (sib.st_ino == sob.st_ino && sib.st_ino != 0)
- {
- /* Don't let as_fatal remove the output file! */
- out_file_name = NULL;
- as_fatal (_("The input and output files must be distinct"));
- }
+ const char *saved_out_file_name = out_file_name;
+
+ /* Don't let as_fatal remove the output file! */
+ out_file_name = NULL;
+ as_fatal (_("The input '%s' and output '%s' files are the same"),
+ argv[i], saved_out_file_name);
}
}
}

View File

@ -75,7 +75,7 @@
Summary: A GNU collection of binary utilities Summary: A GNU collection of binary utilities
Name: %{?cross}binutils%{?_with_debug:-debug} Name: %{?cross}binutils%{?_with_debug:-debug}
Version: 2.31.1 Version: 2.31.1
Release: 19%{?dist} Release: 20%{?dist}
License: GPLv3+ License: GPLv3+
URL: https://sourceware.org/binutils URL: https://sourceware.org/binutils
@ -119,11 +119,6 @@ Patch03: binutils-2.31-export-demangle.h.patch
# order. # order.
Patch04: binutils-2.22.52.0.4-no-config-h-check.patch Patch04: binutils-2.22.52.0.4-no-config-h-check.patch
# Purpose: Import H.J.Lu's Kernel LTO patch.
# Lifetime: Permanent, but needs continual updating.
# FIXME: Try removing....
# Patch05: binutils-2.26-lto.patch
# Purpose: Include the filename concerned in readelf error messages. This # Purpose: Include the filename concerned in readelf error messages. This
# makes readelf's output more helpful when it is run on multiple # makes readelf's output more helpful when it is run on multiple
# input files. # input files.
@ -222,6 +217,10 @@ Patch24: binutils-gold-discard-version-info.patch
# Lifetime: Fixed in 2.32 # Lifetime: Fixed in 2.32
Patch25: binutils-CVE-2018-20002.patch Patch25: binutils-CVE-2018-20002.patch
# Purpose: Fix assembler check for an output file matching an input file.
# Lifetime: Fixed in 2.32
Patch26: binutils-gas-input-matches-output.patch
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
Provides: bundled(libiberty) Provides: bundled(libiberty)
@ -369,6 +368,7 @@ using libelf instead of BFD.
%patch23 -p1 %patch23 -p1
%patch24 -p1 %patch24 -p1
%patch25 -p1 %patch25 -p1
%patch26 -p1
# We cannot run autotools as there is an exact requirement of autoconf-2.59. # We cannot run autotools as there is an exact requirement of autoconf-2.59.
# FIXME - this is no longer true. Maybe try reinstating autotool use ? # FIXME - this is no longer true. Maybe try reinstating autotool use ?
@ -692,9 +692,8 @@ fi
%{_bindir}/%{?cross}ld.bfd %{ld_bfd_priority} %{_bindir}/%{?cross}ld.bfd %{ld_bfd_priority}
%{_sbindir}/alternatives --install %{_bindir}/%{?cross}ld %{?cross}ld \ %{_sbindir}/alternatives --install %{_bindir}/%{?cross}ld %{?cross}ld \
%{_bindir}/%{?cross}ld.gold %{ld_gold_priority} %{_bindir}/%{?cross}ld.gold %{ld_gold_priority}
if [ $1 = 0 ]; then # Do not run "alternatives --auto ld" here. Leave the setting to
%{_sbindir}/alternatives --auto %{?cross}ld # however the user previously had it set. See BZ 1592069 for more details.
fi
%endif # both ld.gold and ld.bfd %endif # both ld.gold and ld.bfd
%if %{isnative} %if %{isnative}
@ -797,6 +796,9 @@ exit 0
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
%changelog %changelog
* Wed Jan 30 2019 Nick Clifton <nickc@redhat.com> - 2.31.1-20
- Fix the assembler's check that the output file is not also one of the input files. (#1660279)
* Thu Jan 03 2019 Nick Clifton <nickc@redhat.com> - 2.31.1-19 * Thu Jan 03 2019 Nick Clifton <nickc@redhat.com> - 2.31.1-19
- Fix a memory leak reading minisymbols. (#1661535) - Fix a memory leak reading minisymbols. (#1661535)