public inbox for cygwin-developers@cygwin.com
 help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin-developers@cygwin.com
Subject: Re: About the dll search algorithm of dlopen (patch-r2)
Date: Mon, 22 Aug 2016 18:37:00 -0000	[thread overview]
Message-ID: <20160822183710.GA26590@calimero.vinschen.de> (raw)
In-Reply-To: <0963e74e-c963-a7f4-19e7-490b02f9393e@ssi-schaefer.com>

[-- Attachment #1: Type: text/plain, Size: 4041 bytes --]

Hi Michael,

On Aug 22 18:02, Michael Haubenwallner wrote:
> What about this one: 've dropped any templates now,
> while keeping the basenames logic inside dlopen.

I was going to reply to your other mail but I'll deferred that for now
and looked into your code instead.  I think we can basically go along
with this.  A few points, though.

> +      /* Finally we better have some fallback. */
> +      finder.add_searchdir ("/usr/lib", -1);

You're not adding /usr/bin here because your code contains automatic
code for lib -> bin duplication... see (*) below.

> @@ -113,6 +103,7 @@ dlopen (const char *name, int flags)
>  {
>    void *ret = NULL;
>  
> +  debug_printf ("flags %d for %s", flags, name);

Stray debug_printf?  Otherwise, if you have a reason to see the
flags, please provide an extra patch for this.

> diff --git a/winsup/cygwin/pathfinder.h b/winsup/cygwin/pathfinder.h
> new file mode 100644
> index 0000000..3453692
> --- /dev/null
> +++ b/winsup/cygwin/pathfinder.h
> @@ -0,0 +1,112 @@
> +/* pathfinder.h: find one of multiple file names in path
> +
> +   Copyright 2016 Red Hat, Inc.

Minor point:  Please drop the "Copyright ..., Red Hat" line.  With the
new LGPL copyright regime we removed them.  They are not required and
keeping them in shape is awkward.

> +      /* Search "x/bin:x/lib" for "x/lib" */
> +      if (dirlen >=4 && !strncmp (dir + dirlen - 4, "/lib", 4))
> +	/* prealloc buffer in searchdir for any basename we will search for */
> +	searchbuffers_.appendv (dir, dirlen - 4, "/bin", 4, "/", 1 + basenames_maxlen_, NULL);
> +
> +      /* prealloc buffer in searchdir for any basename we will search for */
> +      searchbuffers_.appendv (dir, dirlen, "/", 1 + basenames_maxlen_, NULL);
> +  }

(*) Yuk!  Do we really, *really* want that?  The redirection from
    /usr/lib to /usr/bin is only done for system libs, and only because
    otherwise we had trouble starting Cygwin from CMD or the Explorer
    GUI "Run..." box.  We can't change this without breaking everything
    since we *do* depend on the Windows loader yet.
    
    However, as long as this is restricted to /usr/lib, /usr/bin, it's a
    closed system under control of "the distro".  If you extend this to
    *any* external path ending in "lib", isn't it inherently dangerous
    to automate this under the hood, without the application's consent?
    Or, FWIW, the user's consent in case of LD_LIBRARY_PATH?

> diff --git a/winsup/cygwin/vstrlist.h b/winsup/cygwin/vstrlist.h
> new file mode 100644
> index 0000000..ecbdc64
> --- /dev/null
> +++ b/winsup/cygwin/vstrlist.h
> [...]
> +    void * operator new (size_t class_size, char const * part0, va_list parts)
> +    {
> +      char const * part = part0;
> +      va_list partsdup;
> +      va_copy (partsdup, parts);
> +      size_t bufferlength = 0;
> +      while (part)
> +	{
> +	  int partlen = va_arg (partsdup, int);
> +	  if (partlen < 0)
> +	    partlen = strlen (part);
> +	  bufferlength += partlen;
> +	  part = va_arg (partsdup, char const *);
> +	}
> +      va_end (partsdup);
> +
> +      return cmalloc_abort (HEAP_STR, class_size + bufferlength);
> +    }

Uhm... I don't think this is correct.  Using cmalloc and friends has a
specific purpose.  Only internal datastructures which are inherited by
child processes via fork/exec are supposed to be allocated on the
cygheap.  The cygheap really shouldn't be used freely for other
purposes.  You could leak it to child processes if another thread forks
during your thread's call to dlopen.  Also, especially on 32 bit the
pressure on the cygheap is not insignificant.  Please use malloc/free
instead.

Other than that your patch looks pretty well to me.  Except, uhm...
maybe you want to comment the new classes with a usage description?


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2016-08-22 18:37 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-01  6:39 About the dll search algorithm of dlopen Michael Haubenwallner
2016-06-01 11:09 ` Corinna Vinschen
2016-06-01 14:25   ` Michael Haubenwallner
2016-06-01 20:18     ` Corinna Vinschen
2016-06-01 23:29       ` Yaakov Selkowitz
2016-08-19 16:37       ` Michael Haubenwallner
2016-08-19 16:39         ` Michael Haubenwallner
2016-08-20 19:32           ` Corinna Vinschen
2016-08-22 12:15             ` Michael Haubenwallner
2016-08-22 12:48               ` Peter Rosin
2016-08-22 13:01                 ` Michael Haubenwallner
2016-08-22 16:02               ` About the dll search algorithm of dlopen (patch-r2) Michael Haubenwallner
2016-08-22 18:37                 ` Corinna Vinschen [this message]
2016-08-23  8:16                   ` Corinna Vinschen
2016-08-25 17:48                   ` About the dll search algorithm of dlopen (patch-r3) Michael Haubenwallner
2016-08-26 10:59                     ` Corinna Vinschen
2016-08-26 11:18                       ` Corinna Vinschen
2016-08-26 11:49                         ` Corinna Vinschen
2016-08-29 16:50                           ` Michael Haubenwallner
2016-08-30 14:51                             ` Corinna Vinschen
2016-08-30 15:57                               ` Michael Haubenwallner
2016-08-31 18:48                                 ` Corinna Vinschen
2016-09-01  8:58                         ` Michael Haubenwallner
2016-08-26 14:08                       ` Michael Haubenwallner
2016-08-30 13:26                         ` Corinna Vinschen
2016-08-26 12:04                     ` Corinna Vinschen
2016-08-29  9:24                       ` Michael Haubenwallner
2016-08-30 13:35                         ` Corinna Vinschen
2016-08-30 16:41                           ` Michael Haubenwallner
2016-08-31 18:43                             ` Corinna Vinschen
2016-08-22 18:49               ` About the dll search algorithm of dlopen Corinna Vinschen
2016-08-23  8:55                 ` Michael Haubenwallner

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=20160822183710.GA26590@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin-developers@cygwin.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).