All of lore.kernel.org
 help / color / mirror / Atom feed
From: Saul Wold <saul.wold@intel.com>
To: Patches and discussions about the oe-core layer
	<openembedded-core@lists.openembedded.org>
Cc: Martin Jansa <martin.jansa@gmail.com>, Klaus Kurzmann <mok@fluxnetz.de>
Subject: Re: [PATCHv2] eglibc-2.14: add patch to fix libdl crash
Date: Fri, 14 Oct 2011 09:40:35 -0700	[thread overview]
Message-ID: <4E986603.7090601@intel.com> (raw)
In-Reply-To: <1318403001-30440-1-git-send-email-Martin.Jansa@gmail.com>

On 10/12/2011 12:03 AM, Martin Jansa wrote:
> From: Klaus Kurzmann<mok@fluxnetz.de>
>
> * Without this patch programs using alsa-lib crash (alsamixer for example).
> * This patch is taken verbatim from ArchLinux.
>
> Signed-off-by: Klaus Kurzmann<mok@fluxnetz.de>
> Signed-off-by: Martin Jansa<Martin.Jansa@gmail.com>
> ---
>   .../eglibc-2.14/glibc-2.14-libdl-crash.patch       |  131 ++++++++++++++++++++
>   meta/recipes-core/eglibc/eglibc_2.14.bb            |    5 +-
>   2 files changed, 134 insertions(+), 2 deletions(-)
>   create mode 100644 meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
>
> diff --git a/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
> new file mode 100644
> index 0000000..e1f135c
> --- /dev/null
> +++ b/meta/recipes-core/eglibc/eglibc-2.14/glibc-2.14-libdl-crash.patch
> @@ -0,0 +1,131 @@
> +Without this patch programs using alsa-lib crash (alsamixer for example).
> +Removed Copyright reverts
> +
> +Upstream-Status: Pending
> +
> +http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=675155e9
> +http://sourceware.org/ml/libc-alpha/2011-06/msg00006.html
> +
> +many distributions are using this already
> +http://chakra-project.org/ccr/packages/glibc/glibc/PKGBUILD
> +http://mailman.archlinux.org/pipermail/arch-commits/2011-June/137142.html
> +http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/glibc/current/SOURCES/glibc-2.14-libdl-crash.patch?view=markup&pathrev=691343
> +http://repos.archlinuxppc.org/wsvn/filedetails.php?repname=packages&path=%2Fglibc%2Ftrunk%2Fglibc-2.14-libdl-crash.patch
> +
> +diff --git a/elf/dl-close.c b/elf/dl-close.c
> +index 73b2a2f..9bd91e3 100644
> +--- a/elf/dl-close.c
> ++++ b/elf/dl-close.c
> +@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
> +   if (map->l_direct_opencount>  0 || map->l_type != lt_loaded
> +       || dl_close_state != not_pending)
> +     {
> +-      if (map->l_direct_opencount == 0)
> +-	{
> +-	  if (map->l_type == lt_loaded)
> +-	    dl_close_state = rerun;
> +-	  else if (map->l_type == lt_library)
> +-	    {
> +-	      struct link_map **oldp = map->l_initfini;
> +-	      map->l_initfini = map->l_orig_initfini;
> +-	      _dl_scope_free (oldp);
> +-	    }
> +-	}
> ++      if (map->l_direct_opencount == 0&&  map->l_type == lt_loaded)
> ++	dl_close_state = rerun;
> +
> +       /* There are still references to this object.  Do nothing more.  */
> +       if (__builtin_expect (GLRO(dl_debug_mask)&  DL_DEBUG_FILES, 0))
> +diff --git a/elf/dl-deps.c b/elf/dl-deps.c
> +index 9e30594..3890d00 100644
> +--- a/elf/dl-deps.c
> ++++ b/elf/dl-deps.c
> +@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
> + 		  nneeded * sizeof needed[0]);
> + 	  atomic_write_barrier ();
> + 	  l->l_initfini = l_initfini;
> ++	  l->l_free_initfini = 1;
> + 	}
> +
> +       /* If we have no auxiliary objects just go on to the next map.  */
> +@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING"));
> +   l_initfini[nlist] = NULL;
> +   atomic_write_barrier ();
> +   map->l_initfini = l_initfini;
> ++  map->l_free_initfini = 1;
> +   if (l_reldeps != NULL)
> +     {
> +       atomic_write_barrier ();
> +@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING"));
> +       _dl_scope_free (old_l_reldeps);
> +     }
> +   if (old_l_initfini != NULL)
> +-      map->l_orig_initfini = old_l_initfini;
> ++    _dl_scope_free (old_l_initfini);
> + }
> +diff --git a/elf/dl-libc.c b/elf/dl-libc.c
> +index 7be9483..a13fce3 100644
> +--- a/elf/dl-libc.c
> ++++ b/elf/dl-libc.c
> +@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
> +
> +   for (Lmid_t ns = 0; ns<  GL(dl_nns); ++ns)
> +     {
> +-      /* Remove all additional names added to the objects.  */
> +       for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next)
> + 	{
> + 	  struct libname_list *lnp = l->l_libname->next;
> +
> + 	  l->l_libname->next = NULL;
> +
> ++	  /* Remove all additional names added to the objects.  */
> + 	  while (lnp != NULL)
> + 	    {
> + 	      struct libname_list *old = lnp;
> +@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
> + 	      if (! old->dont_free)
> + 		free (old);
> + 	    }
> ++
> ++	  /* Free the initfini dependency list.  */
> ++	  if (l->l_free_initfini)
> ++	    free (l->l_initfini);
> + 	}
> +
> +       if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
> +diff --git a/elf/rtld.c b/elf/rtld.c
> +index 4a9109e..617e30e 100644
> +--- a/elf/rtld.c
> ++++ b/elf/rtld.c
> +@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
> + 	      lnp->dont_free = 1;
> + 	      lnp = lnp->next;
> + 	    }
> ++	  l->l_free_initfini = 0;
> +
> + 	  if (l !=&GL(dl_rtld_map))
> + 	    _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
> +diff --git a/include/link.h b/include/link.h
> +index e877104..051b99a 100644
> +--- a/include/link.h
> ++++ b/include/link.h
> +@@ -192,6 +192,9 @@ struct link_map
> + 						 during LD_TRACE_PRELINKING=1
> + 						 contains any DT_SYMBOLIC
> + 						 libraries.  */
> ++    unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be
> ++				       freed, ie. not allocated with
> ++				       the dummy malloc in ld.so.  */
> +
> +     /* Collected information about own RPATH directories.  */
> +     struct r_search_path_struct l_rpath_dirs;
> +@@ -240,9 +243,6 @@ struct link_map
> +
> +     /* List of object in order of the init and fini calls.  */
> +     struct link_map **l_initfini;
> +-    /* The init and fini list generated at startup, saved when the
> +-       object is also loaded dynamically.  */
> +-    struct link_map **l_orig_initfini;
> +
> +     /* List of the dependencies introduced through symbol binding.  */
> +     struct link_map_reldeps
> diff --git a/meta/recipes-core/eglibc/eglibc_2.14.bb b/meta/recipes-core/eglibc/eglibc_2.14.bb
> index b2821db..571d39d 100644
> --- a/meta/recipes-core/eglibc/eglibc_2.14.bb
> +++ b/meta/recipes-core/eglibc/eglibc_2.14.bb
> @@ -3,7 +3,7 @@ require eglibc.inc
>   SRCREV = "15225"
>
>   DEPENDS += "gperf-native"
> -PR = "r0"
> +PR = "r1"
>   PR_append = "+svnr${SRCPV}"
>
>   EGLIBC_BRANCH="eglibc-2_14"
> @@ -19,7 +19,8 @@ SRC_URI = "svn://www.eglibc.org/svn/branches/;module=${EGLIBC_BRANCH};proto=http
>              file://ppc-sqrt.patch \
>              file://multilib_readlib.patch \
>              file://eglibc-rpc-export-again.patch \
> -	   "
> +           file://glibc-2.14-libdl-crash.patch \
> +          "
>   LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \
>         file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \
>         file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \

Merged into OE-Core

Thanks
	Sau!



      reply	other threads:[~2011-10-14 16:46 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-03  9:30 [PATCH] eglibc-2.14: add patch to fix libdl crash mokml
2011-10-03 19:47 ` Khem Raj
2011-10-04 20:05   ` Klaus 'mrmoku' Kurzmann
2011-10-04 20:17     ` Khem Raj
2011-10-05  4:57       ` Saul Wold
2011-10-12  7:03 ` [PATCHv2] " Martin Jansa
2011-10-14 16:40   ` Saul Wold [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E986603.7090601@intel.com \
    --to=saul.wold@intel.com \
    --cc=martin.jansa@gmail.com \
    --cc=mok@fluxnetz.de \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.