public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] ldconfig: Ignore all GDB extension files
@ 2024-05-06 17:16 Adam Sampson
  2024-05-06 17:16 ` [PATCH v2 1/2] ldconfig: Move endswithn into a new header file Adam Sampson
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Adam Sampson @ 2024-05-06 17:16 UTC (permalink / raw)
  To: libc-alpha; +Cc: Adam Sampson

ldconfig already ignores files with the -gdb.py suffix, but GDB also
looks for -gdb.gdb and -gdb.scm files. These aren't as widely used, but
libguile at least comes with a -gdb.scm file.

These patches make ldconfig ignore all three types of file.

Changes from v1:
* Reuse ldconfig's endswithn function (suggested by Florian Weimer).
  I didn't spot any other places that could use this directly, although
  there are several tests that have implementations of startswith.

Adam Sampson (2):
  ldconfig: Move endswithn into a new header file
  ldconfig: Ignore all GDB extension files

 elf/endswith.h | 33 +++++++++++++++++++++++++++++++++
 elf/ldconfig.c | 12 +-----------
 elf/readlib.c  | 11 +++++++----
 3 files changed, 41 insertions(+), 15 deletions(-)
 create mode 100644 elf/endswith.h

-- 
2.45.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2 1/2] ldconfig: Move endswithn into a new header file
  2024-05-06 17:16 [PATCH v2 0/2] ldconfig: Ignore all GDB extension files Adam Sampson
@ 2024-05-06 17:16 ` Adam Sampson
  2024-05-06 17:16 ` [PATCH v2 2/2] ldconfig: Ignore all GDB extension files Adam Sampson
  2024-06-05  9:49 ` [PATCH v2 0/2] " Adam Sampson
  2 siblings, 0 replies; 4+ messages in thread
From: Adam Sampson @ 2024-05-06 17:16 UTC (permalink / raw)
  To: libc-alpha; +Cc: Adam Sampson

is_gdb_python_file is doing a similar test, so it can use this helper
function as well.

Signed-off-by: Adam Sampson <ats@offog.org>
---
 elf/endswith.h | 33 +++++++++++++++++++++++++++++++++
 elf/ldconfig.c | 12 +-----------
 elf/readlib.c  |  3 ++-
 3 files changed, 36 insertions(+), 12 deletions(-)
 create mode 100644 elf/endswith.h

diff --git a/elf/endswith.h b/elf/endswith.h
new file mode 100644
index 0000000000..c6430c48be
--- /dev/null
+++ b/elf/endswith.h
@@ -0,0 +1,33 @@
+/* Copyright (C) 2023-2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published
+   by the Free Software Foundation; version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _ENDSWITH_H
+#define _ENDSWITH_H
+
+#include <string.h>
+
+/* 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);
+}
+
+#endif /* _ENDSWITH_H */
diff --git a/elf/ldconfig.c b/elf/ldconfig.c
index b64c54b53e..0f3ef707dd 100644
--- a/elf/ldconfig.c
+++ b/elf/ldconfig.c
@@ -40,6 +40,7 @@
 #include <libgen.h>
 
 #include <ldconfig.h>
+#include <endswith.h>
 #include <dl-cache.h>
 #include <dl-hwcaps.h>
 #include <dl-is_dso.h>
@@ -661,17 +662,6 @@ 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
diff --git a/elf/readlib.c b/elf/readlib.c
index 4d67c74136..32e8b8eb22 100644
--- a/elf/readlib.c
+++ b/elf/readlib.c
@@ -33,6 +33,7 @@
 #include <gnu/lib-names.h>
 
 #include <ldconfig.h>
+#include <endswith.h>
 
 #define Elf32_CLASS ELFCLASS32
 #define Elf64_CLASS ELFCLASS64
@@ -48,7 +49,7 @@ static bool
 is_gdb_python_file (const char *name)
 {
   size_t len = strlen (name);
-  return len > 7 && strcmp (name + len - 7, "-gdb.py") == 0;
+  return endswithn (name, len, "-gdb.py");
 }
 
 /* Returns 0 if everything is ok, != 0 in case of error.  */
-- 
2.45.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v2 2/2] ldconfig: Ignore all GDB extension files
  2024-05-06 17:16 [PATCH v2 0/2] ldconfig: Ignore all GDB extension files Adam Sampson
  2024-05-06 17:16 ` [PATCH v2 1/2] ldconfig: Move endswithn into a new header file Adam Sampson
@ 2024-05-06 17:16 ` Adam Sampson
  2024-06-05  9:49 ` [PATCH v2 0/2] " Adam Sampson
  2 siblings, 0 replies; 4+ messages in thread
From: Adam Sampson @ 2024-05-06 17:16 UTC (permalink / raw)
  To: libc-alpha; +Cc: Adam Sampson

ldconfig already ignores files with the -gdb.py suffix, but GDB also
looks for -gdb.gdb and -gdb.scm files. These aren't as widely used, but
libguile at least comes with a -gdb.scm file.

Rename is_gdb_python_file to is_gdb_extension_file, and make it
recognise all three types of GDB extension.

Signed-off-by: Adam Sampson <ats@offog.org>
---
 elf/readlib.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/elf/readlib.c b/elf/readlib.c
index 32e8b8eb22..f3129c4557 100644
--- a/elf/readlib.c
+++ b/elf/readlib.c
@@ -44,12 +44,14 @@ struct known_names
   int flag;
 };
 
-/* Check if string corresponds to a GDB Python file.  */
+/* Check if string corresponds to a GDB extension file.  */
 static bool
-is_gdb_python_file (const char *name)
+is_gdb_extension_file (const char *name)
 {
   size_t len = strlen (name);
-  return endswithn (name, len, "-gdb.py");
+  return (endswithn (name, len, "-gdb.gdb")
+	  || endswithn (name, len, "-gdb.py")
+	  || endswithn (name, len, "-gdb.scm"));
 }
 
 /* Returns 0 if everything is ok, != 0 in case of error.  */
@@ -146,7 +148,7 @@ process_file (const char *real_file_name, const char *file_name,
       size_t len = MIN (statbuf.st_size, 512);
       if (memmem (file_contents, len, "GROUP", 5) == NULL
 	  && memmem (file_contents, len, "GNU ld script", 13) == NULL
-	  && !is_gdb_python_file (file_name))
+	  && !is_gdb_extension_file (file_name))
 	error (0, 0, _("%s is not an ELF file - it has the wrong magic bytes at the start.\n"),
 	       file_name);
       ret = 1;
-- 
2.45.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2 0/2] ldconfig: Ignore all GDB extension files
  2024-05-06 17:16 [PATCH v2 0/2] ldconfig: Ignore all GDB extension files Adam Sampson
  2024-05-06 17:16 ` [PATCH v2 1/2] ldconfig: Move endswithn into a new header file Adam Sampson
  2024-05-06 17:16 ` [PATCH v2 2/2] ldconfig: Ignore all GDB extension files Adam Sampson
@ 2024-06-05  9:49 ` Adam Sampson
  2 siblings, 0 replies; 4+ messages in thread
From: Adam Sampson @ 2024-06-05  9:49 UTC (permalink / raw)
  To: libc-alpha

Ping - any further changes needed for these?

On Mon, May 06, 2024 at 06:16:31PM +0100, Adam Sampson wrote:
> ldconfig already ignores files with the -gdb.py suffix, but GDB also
> looks for -gdb.gdb and -gdb.scm files. These aren't as widely used, but
> libguile at least comes with a -gdb.scm file.
> 
> These patches make ldconfig ignore all three types of file.
> 
> Changes from v1:
> * Reuse ldconfig's endswithn function (suggested by Florian Weimer).
>   I didn't spot any other places that could use this directly, although
>   there are several tests that have implementations of startswith.
> 
> Adam Sampson (2):
>   ldconfig: Move endswithn into a new header file
>   ldconfig: Ignore all GDB extension files

On Patchwork:
https://patchwork.sourceware.org/project/glibc/patch/20240506171633.30008-2-ats@offog.org/
https://patchwork.sourceware.org/project/glibc/patch/20240506171633.30008-3-ats@offog.org/

Thanks,

-- 
Adam Sampson <ats@offog.org>                         <http://offog.org/>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-06-05  9:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-06 17:16 [PATCH v2 0/2] ldconfig: Ignore all GDB extension files Adam Sampson
2024-05-06 17:16 ` [PATCH v2 1/2] ldconfig: Move endswithn into a new header file Adam Sampson
2024-05-06 17:16 ` [PATCH v2 2/2] ldconfig: Ignore all GDB extension files Adam Sampson
2024-06-05  9:49 ` [PATCH v2 0/2] " Adam Sampson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).