public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Carlos O'Donell <carlos@redhat.com>
To: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>,
	libc-alpha@sourceware.org, szabolcs.nagy@arm.com,
	Florian Weimer <fweimer@redhat.com>
Subject: Re: [PATCH] Increase robustness of internal dlopen() by using RTLD_NOW [BZ #22766]
Date: Wed, 25 Apr 2018 13:08:00 -0000	[thread overview]
Message-ID: <72bf4b7b-3129-21a7-af89-24aea13c0b04@redhat.com> (raw)
In-Reply-To: <20180425124256.6562-1-tuliom@linux.ibm.com>

On 04/25/2018 07:42 AM, Tulio Magno Quites Machado Filho wrote:
> Prevent random runtime crashes due to missing symbols caused by mixed
> libnss_* versions.

You are arguing that this should fail at the first call into the NSS
service, which causes the initial dlopen? That is OK with me.

An even further patch would be to load all NSS modules early, and that's
something Florian and I have discussed. However, I'm not recommending
you do that now, but I wanted to be clear about a direction that this
code might take. Eventually we need a mechanism that will also work for
static applications since we have deprecated dlopen there, but I'm not
sure what Florian's ideas might be in this area.

> 2018-04-25  Tulio Magno Quites Machado Filho  <tuliom@linux.ibm.com>
> 
> 	[BZ #22766]
> 	* include/dlfcn.h [__libc_dl_open]: Replace RTLD_LAZY with RTLD_NOW.
> 
> Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
> ---
>  include/dlfcn.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/dlfcn.h b/include/dlfcn.h
> index 12ef913e19..2c4bfe86b4 100644
> --- a/include/dlfcn.h
> +++ b/include/dlfcn.h
> @@ -32,7 +32,7 @@ extern char **__libc_argv attribute_hidden;
>  /* Now define the internal interfaces.  */
>  
>  #define __libc_dlopen(name) \
> -  __libc_dlopen_mode (name, RTLD_LAZY | __RTLD_DLOPEN)
> +  __libc_dlopen_mode (name, RTLD_NOW | __RTLD_DLOPEN)
>  extern void *__libc_dlopen_mode  (const char *__name, int __mode);
>  extern void *__libc_dlsym   (void *__map, const char *__name);
>  extern void *__libc_dlvsym (void *map, const char *name, const char *version);
> 

We should cleanup more.

sysdeps/gnu/unwind-resume.c:  handle = __libc_dlopen_mode (LIBGCC_S_SO, RTLD_NOW | __RTLD_DLOPEN);
sysdeps/nptl/unwind-forcedunwind.c:  handle = __libc_dlopen_mode (LIBGCC_S_SO, RTLD_NOW | __RTLD_DLOPEN);

Since we are now using RTLD_NOW:

* Switch back to __libc_dlopen (effectively reverting part of 
  Florian's 08c6e95234c, but leave the comments)
* Add a big comment in dlfcn.h to explain why RTLD_NOW is needed:
  * Same comment as in commit 08c6e95234c, plus NSS case.

Thoughts?

-- 
Cheers,
Carlos.

  reply	other threads:[~2018-04-25 13:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-25 12:43 Tulio Magno Quites Machado Filho
2018-04-25 13:08 ` Carlos O'Donell [this message]
2018-04-25 19:27   ` [PATCHv2] " Tulio Magno Quites Machado Filho
2018-04-26  1:02     ` Carlos O'Donell
2018-04-26 16:57       ` Tulio Magno Quites Machado Filho

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=72bf4b7b-3129-21a7-af89-24aea13c0b04@redhat.com \
    --to=carlos@redhat.com \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    --cc=szabolcs.nagy@arm.com \
    --cc=tuliom@linux.ibm.com \
    /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 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).