tcsh-6.18.01-elf-interpreter.patch removed

This patch was not working in latest tcsh packages in Fedora, and it
  was not accepted by upstream. Generally, shells (bash, ksh, tcsh, ...)
  does not want to have this kind of binary parsing inside of them. See:

  <http://mx.gw.com/pipermail/tcsh-bugs/2013-April/000833.html>
This commit is contained in:
David Kaspar [Dee'Kej] 2016-04-26 16:55:27 +02:00
parent 4da5459ce3
commit 0de832d6c5
2 changed files with 1 additions and 200 deletions

View File

@ -1,198 +0,0 @@
From b913dff5f7c123691b9aea3cee4bf270bc56659b Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Wed, 27 Aug 2014 13:55:10 +0200
Subject: [PATCH 12/14] report missing ELF interpreter
Resolves: #711066
Adjusted for tcsh-6.19.00 by Fridolin Pokorny <fpokorny@redhat.com>
---
configure.in | 5 ++-
sh.err.c | 4 +-
sh.exec.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 152 insertions(+), 3 deletions(-)
diff --git a/sh.err.c b/sh.err.c
index 29d41c3..262f9bf 100644
--- a/sh.err.c
+++ b/sh.err.c
@@ -189,7 +189,8 @@ char *seterr = NULL; /* Holds last error if there was one */
#define ERR_INVALID 133
#define ERR_BADCOLORVAR 134
#define ERR_EOF 135
-#define NO_ERRORS 136
+#define ERR_ELFINTERP 136
+#define NO_ERRORS 137
static const char *elst[NO_ERRORS] INIT_ZERO_STRUCT;
@@ -367,6 +368,7 @@ errinit(void)
elst[ERR_BADJOB] = CSAVS(1, 136, "No such job (badjob)");
elst[ERR_BADCOLORVAR] = CSAVS(1, 137, "Unknown colorls variable `%c%c'");
elst[ERR_EOF] = CSAVS(1, 138, "Unexpected end of file");
+ elst[ERR_ELFINTERP] = CSAVS(1, 139, "No such ELF interpreter");
}
/* Cleanup data. */
diff --git a/sh.exec.c b/sh.exec.c
index 2b41a53..c1f4b7e 100644
--- a/sh.exec.c
+++ b/sh.exec.c
@@ -40,6 +40,10 @@ RCSID("$tcsh: sh.exec.c,v 3.79 2011/02/25 23:58:34 christos Exp $")
#include <nt.const.h>
#endif /*WINNT_NATIVE*/
+#ifdef HAVE_ELF_H
+#include <elf.h>
+#endif /*HAVE_ELF_H*/
+
/*
* C shell
*/
@@ -509,6 +513,142 @@ texec(Char *sf, Char **st)
case 0: /* execv fails and returns 0! */
#endif /* _IBMR2 */
case ENOENT:
+#ifdef HAVE_ELF_H
+ /*
+ * If dynamically linked ELF binary is not executed and exists,
+ * the real reason ENOENT is that ELF interpreter is missing.
+ *
+ * Written by Ulrich Drepper for bash
+ * adopted by Fridolin Pokorny <fpokorny@redhat.com>
+ */
+ if ((fd = xopen(f, O_RDONLY|O_LARGEFILE)) != -1) {
+ int nread;
+ char *sample;
+ int offset = -1;
+ int sample_size;
+
+ /* Inspect 32 and 64 ELF */
+ if (sizeof(Elf64_Ehdr) > sizeof(Elf32_Ehdr))
+ sample_size = sizeof(Elf64_Ehdr);
+ else
+ sample_size = sizeof(Elf32_Ehdr);
+
+ sample = xmalloc(sample_size);
+
+ if (sample != 0 &&
+ (nread = xread(fd, sample, sample_size)) == sample_size) {
+ if (memcmp(sample, ELFMAG, SELFMAG) == 0) {
+ if (sample[EI_CLASS] == ELFCLASS32 &&
+ sample_size >= sizeof(Elf32_Ehdr)) {
+ Elf32_Ehdr ehdr;
+ Elf32_Phdr *phdr;
+ int nphdr;
+
+ /*
+ * We have to copy the data since the sample buffer
+ * might not be aligned correctly to be accessed as
+ * an Elf32_Ehdr struct.
+ */
+ memcpy(&ehdr, sample, sizeof(Elf32_Ehdr));
+
+ nphdr = ehdr.e_phnum;
+ phdr = xmalloc(nphdr * ehdr.e_phentsize);
+ if(phdr != NULL) {
+#ifdef HAVE_PREAD
+ nread = pread(fd, phdr, nphdr * ehdr.e_phentsize,
+ ehdr.e_phoff);
+#else /* !HAVE_PREAD */
+ if (lseek(fd, ehdr.e_phoff, SEEK_SET) != -1)
+ nread = read(fd, phdr,
+ nphdr * ehdr.e_phentsize);
+ else
+ nread = -1;
+#endif /* HAVE_PREAD */
+ if (nread == nphdr * ehdr.e_phentsize) {
+ while (nphdr-- > 0) {
+ if (phdr[nphdr].p_type == PT_INTERP) {
+ offset = phdr[nphdr].p_offset;
+ break;
+ }
+ }
+ }
+ xfree(phdr);
+ }
+ } else if (sample[EI_CLASS] == ELFCLASS64 &&
+ sample_size >= sizeof(Elf64_Ehdr)) {
+ Elf64_Ehdr ehdr;
+ Elf64_Phdr *phdr;
+ int nphdr;
+
+ /*
+ * We have to copy the data since the sample buffer
+ * might not be aligned correctly to be accessed as
+ * an Elf64_Ehdr struct.
+ */
+ memcpy(&ehdr, sample, sizeof(Elf64_Ehdr));
+
+ nphdr = ehdr.e_phnum;
+ phdr = xmalloc(nphdr * ehdr.e_phentsize);
+ if (phdr != NULL) {
+#ifdef HAVE_PREAD
+ nread = pread (fd, phdr, nphdr * ehdr.e_phentsize,
+ ehdr.e_phoff);
+#else /* !HAVE_PREAD */
+ if (lseek(fd, ehdr.e_phoff, SEEK_SET) != -1)
+ nread = read (fd, phdr,
+ nphdr * ehdr.e_phentsize);
+ else
+ nread = -1;
+#endif /* HAVE_PREAD */
+ if (nread == nphdr * ehdr.e_phentsize) {
+ while (nphdr-- > 0) {
+ if (phdr[nphdr].p_type == PT_INTERP) {
+ offset = phdr[nphdr].p_offset;
+ break;
+ }
+ }
+ }
+ xfree (phdr);
+ }
+ }
+
+ if (offset != -1) {
+ size_t maxlen = 0;
+ size_t actlen = 0;
+ char *interp = NULL;
+
+ do {
+ if (actlen == maxlen) {
+ char *newinterp = xrealloc(interp, maxlen += 200);
+ if (newinterp == NULL) {
+ actlen = 0;
+ break;
+ }
+ interp = newinterp;
+#ifdef HAVE_PREAD
+ actlen = pread (fd, interp, maxlen, offset);
+#else /* !HAVE_PREAD */
+ if (lseek (fd, offset, SEEK_SET) != -1)
+ actlen = read (fd, interp, maxlen);
+ else
+ actlen = -1;
+#endif /* HAVE_PREAD */
+ }
+ } while (actlen > 0 &&
+ memchr (interp, '\0', actlen) == NULL);
+
+ if (actlen > 0) {
+ xclose (fd);
+ xfree (interp);
+ setname(f);
+ stderror(ERR_NAME | ERR_ELFINTERP);
+ }
+ }
+ }
+ }
+ xfree(sample);
+ }
+#endif /* HAVE_ELF_H */
break;
default:
--
1.9.3

View File

@ -35,8 +35,6 @@ Source: ftp://ftp.astron.com/pub/tcsh/%{name}-%{version}.tar.gz
Patch4: tcsh-6.15.00-hist-sub.patch
Patch9: tcsh-6.13.00-memoryuse.patch
Patch11: tcsh-6.14.00-order.patch
# Proposed upstream - http://mx.gw.com/pipermail/tcsh-bugs/2013-April/000833.html
Patch35: tcsh-6.18.01-elf-interpreter.patch
Patch36: tcsh-6.18.01-introduce-tcsh_posix_status.patch
# Proposed upstream - http://mx.gw.com/pipermail/tcsh-bugs/2015-May/000944.html
Patch39: tcsh-6.19.00-gcc5-calloc.patch
@ -150,6 +148,7 @@ fi
- Drop tcsh-6.14.00-unprintable.patch - issue not reproducible with 6.19.00 upstream version
- Drop tcsh-6.14.00-syntax.patch - patch not accepted by upstream, breaks other things
- Drop tcsh-6.18.01-skip-tty-tests.patch - has been fixed in 6.18.05 upstream version
- Drop tcsh-6.18.01-elf-interpreter.patch - patch not working anymore, not accepted by upstream
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 6.19.00-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild