mirror of
git://slackware.nl/current.git
synced 2025-01-03 23:03:22 +01:00
34ba4d05d9
ap/man-pages-5.13-noarch-1.txz: Upgraded. d/binutils-2.37-x86_64-1.txz: Upgraded. With a few upstream patches to fix some regressions in the release, we no longer get any new FTBFS with this, so we'll take it. d/oprofile-1.4.0-x86_64-8.txz: Rebuilt. Recompiled against binutils-2.37. kde/sddm-0.19.0-x86_64-8.txz: Rebuilt. Patched to fix build. l/libcap-2.54-x86_64-1.txz: Upgraded. l/libssh-0.9.6-x86_64-1.txz: Upgraded. Fix possible heap-buffer overflow when rekeying with different key exchange mechanism. For more information, see: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3634 (* Security fix *) l/qt5-5.15.3_20210826_21ea9c12-x86_64-1.txz: Upgraded. Switched to the patched qt5 from https://invent.kde.org/qt/qt/qt5.git. Huge thanks to Heinz Wiesinger for the script to create a release tarball. Likely this fixes many security issues. (* Security fix *) x/libglvnd-1.3.3-x86_64-1.txz: Upgraded. Reverted to this version because changes to the header files won't allow the EGL portions of Qt to properly compile.
232 lines
6.2 KiB
Diff
232 lines
6.2 KiB
Diff
From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001
|
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
Date: Mon, 26 Jul 2021 05:59:55 -0700
|
|
Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd
|
|
|
|
Close the file descriptor if there is no archive plugin file descriptor
|
|
to avoid running out of file descriptors on thin archives with many
|
|
archive members.
|
|
|
|
bfd/
|
|
|
|
PR ld/28138
|
|
* plugin.c (bfd_plugin_close_file_descriptor): Close the file
|
|
descriptor there is no archive plugin file descriptor.
|
|
|
|
ld/
|
|
|
|
PR ld/28138
|
|
* testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for
|
|
native build.
|
|
|
|
PR ld/28138
|
|
* testsuite/ld-plugin/lto.exp: Run ld/28138 tests.
|
|
* testsuite/ld-plugin/pr28138.c: New file.
|
|
* testsuite/ld-plugin/pr28138-1.c: Likewise.
|
|
* testsuite/ld-plugin/pr28138-2.c: Likewise.
|
|
* testsuite/ld-plugin/pr28138-3.c: Likewise.
|
|
* testsuite/ld-plugin/pr28138-4.c: Likewise.
|
|
* testsuite/ld-plugin/pr28138-5.c: Likewise.
|
|
* testsuite/ld-plugin/pr28138-6.c: Likewise.
|
|
* testsuite/ld-plugin/pr28138-7.c: Likewise.
|
|
|
|
(cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742)
|
|
(cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2)
|
|
---
|
|
bfd/plugin.c | 8 +++++++
|
|
ld/testsuite/ld-plugin/lto.exp | 34 ++++++++++++++++++++++++++++++
|
|
ld/testsuite/ld-plugin/pr28138-1.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138-2.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138-3.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138-4.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138-5.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138-6.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138-7.c | 6 ++++++
|
|
ld/testsuite/ld-plugin/pr28138.c | 20 ++++++++++++++++++
|
|
10 files changed, 104 insertions(+)
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c
|
|
create mode 100644 ld/testsuite/ld-plugin/pr28138.c
|
|
|
|
diff --git a/bfd/plugin.c b/bfd/plugin.c
|
|
index 6cfa2b66470..3bab8febe88 100644
|
|
--- a/bfd/plugin.c
|
|
+++ b/bfd/plugin.c
|
|
@@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd)
|
|
&& !bfd_is_thin_archive (abfd->my_archive))
|
|
abfd = abfd->my_archive;
|
|
|
|
+ /* Close the file descriptor if there is no archive plugin file
|
|
+ descriptor. */
|
|
+ if (abfd->archive_plugin_fd == -1)
|
|
+ {
|
|
+ close (fd);
|
|
+ return;
|
|
+ }
|
|
+
|
|
abfd->archive_plugin_fd_open_count--;
|
|
/* Dup the archive plugin file descriptor for later use, which
|
|
will be closed by _bfd_archive_close_and_cleanup. */
|
|
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
|
|
index def69e43ab3..999d911ce6a 100644
|
|
--- a/ld/testsuite/ld-plugin/lto.exp
|
|
+++ b/ld/testsuite/ld-plugin/lto.exp
|
|
@@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } {
|
|
}
|
|
}
|
|
|
|
+run_cc_link_tests [list \
|
|
+ [list \
|
|
+ "Build pr28138.a" \
|
|
+ "-T" "" \
|
|
+ {pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \
|
|
+ pr28138-6.c pr28138-7.c} {} "pr28138.a" \
|
|
+ ] \
|
|
+ [list \
|
|
+ "Build pr28138.o" \
|
|
+ "" "" \
|
|
+ {pr28138.c} {} \
|
|
+ ] \
|
|
+]
|
|
+
|
|
+set exec_output [run_host_cmd "sh" \
|
|
+ "-c \"ulimit -n 20; \
|
|
+ $CC -Btmpdir/ld -o tmpdir/pr28138 \
|
|
+ tmpdir/pr28138.o tmpdir/pr28138.a\""]
|
|
+set exec_output [prune_warnings $exec_output]
|
|
+if [string match "" $exec_output] then {
|
|
+ if { [isnative] } {
|
|
+ set exec_output [run_host_cmd "tmpdir/pr28138" ""]
|
|
+ if [string match "PASS" $exec_output] then {
|
|
+ pass "PR ld/28138"
|
|
+ } else {
|
|
+ fail "PR ld/28138"
|
|
+ }
|
|
+ } else {
|
|
+ pass "PR ld/28138"
|
|
+ }
|
|
+} else {
|
|
+ fail "PR ld/28138"
|
|
+}
|
|
+
|
|
set testname "Build liblto-11.a"
|
|
remote_file host delete "tmpdir/liblto-11.a"
|
|
set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c
|
|
new file mode 100644
|
|
index 00000000000..51d119e1642
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-1.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a0(void);
|
|
+int
|
|
+a1(void)
|
|
+{
|
|
+ return 1 + a0();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c
|
|
new file mode 100644
|
|
index 00000000000..1120cd797e9
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-2.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a1(void);
|
|
+int
|
|
+a2(void)
|
|
+{
|
|
+ return 1 + a1();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c
|
|
new file mode 100644
|
|
index 00000000000..ec464947ee6
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-3.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a2(void);
|
|
+int
|
|
+a3(void)
|
|
+{
|
|
+ return 1 + a2();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c
|
|
new file mode 100644
|
|
index 00000000000..475701b2c5c
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-4.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a3(void);
|
|
+int
|
|
+a4(void)
|
|
+{
|
|
+ return 1 + a3();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c
|
|
new file mode 100644
|
|
index 00000000000..e24f86c363e
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-5.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a4(void);
|
|
+int
|
|
+a5(void)
|
|
+{
|
|
+ return 1 + a4();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c
|
|
new file mode 100644
|
|
index 00000000000..b5b938bdb21
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-6.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a5(void);
|
|
+int
|
|
+a6(void)
|
|
+{
|
|
+ return 1 + a5();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c
|
|
new file mode 100644
|
|
index 00000000000..4ef75bf0f0c
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138-7.c
|
|
@@ -0,0 +1,6 @@
|
|
+extern int a6(void);
|
|
+int
|
|
+a7(void)
|
|
+{
|
|
+ return 1 + a6();
|
|
+}
|
|
diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c
|
|
new file mode 100644
|
|
index 00000000000..68252c9f382
|
|
--- /dev/null
|
|
+++ b/ld/testsuite/ld-plugin/pr28138.c
|
|
@@ -0,0 +1,20 @@
|
|
+#include <stdio.h>
|
|
+
|
|
+extern int a7(void);
|
|
+
|
|
+int
|
|
+a0(void)
|
|
+{
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int
|
|
+main()
|
|
+{
|
|
+ if (a7() == 7)
|
|
+ {
|
|
+ printf ("PASS\n");
|
|
+ return 0;
|
|
+ }
|
|
+ return 1;
|
|
+}
|
|
--
|
|
2.27.0
|
|
|