public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin@cygwin.com
Subject: Re: segfault on 32bit cygwin snapshot
Date: Thu, 4 Mar 2021 17:11:47 +0100	[thread overview]
Message-ID: <YEEGw4P+vtzejGOv@calimero.vinschen.de> (raw)
In-Reply-To: <e15e6d1f-7680-8f80-871e-0d224a3ed682@maxrnd.com>

On Mar  4 01:05, Mark Geisert wrote:
> Corinna Vinschen via Cygwin wrote:
> > Is there a way around that?  I'm not quite sure, so let's brain storm
> > a bit, ok?
> > 
> > - One thing we could try is to remove the above code, but add a python
> >    hack to dlsym instead.  This would let the "old" DLLs work again as
> >    before and for python we could add a hack to dlsym, along these lines:
> > 
> >      if (CYGWIN_VERSION_CHECK_FOR_UNAME_X
> >      	&& modulehandle == cygwin1.dll
> > 	&& strcmp (symname, "uname"))
> >        symname = "uname_x";
> > 
> > Thoughts?  Other ideas?
> 
> That's a sly fix, but it seems that it would do the job.  That's good!
> 
> On a different tack, I was thinking about how run time code could tell the
> difference between the versions of uname() being called.  It can't.  I
> looked at glibc and FreeBSD libc to see if they had to deal with this
> compatibility issue. It seems they don't, or I couldn't locate it if they
> do.
> 
> But FreeBSD has an approach that looked interesting in another way.  They
> have the standard uname() function taking the one usual arg.  But it's just
> a wrapper on a worker function that takes the original arg plus another arg
> specifying the size of the fields in struct utsname.  Paraphrasing, using
> Cygwin names:
>         int uname(struct utsname *uptr)
>         {
>             return uname_x((int) _UTSNAME_LENGTH, uptr);
>         }
> They allow the user to override what we call _UTSNAME_LENGTH.  That seems
> like an invitation to exploit so I don't care for that.  But what I was
> thinking is if we make that first arg to uname_x() be a uintptr_t, we could
> tell (with pretty good confidence) at run time inside uname_x() if we were
> passed a length (from new code passing two args) or a ptr-to-buf (from old
> code just passing one arg).

But uname_x just supports the new implementation, I'm not sure how this
helps us.  We may at least need two wrappers, one is the function called
from new apps, i.e.

  uname () { return uname_worker (sizeof old_utsname, &name); }
  uname_x () { return uname_worker (sizeof utsname, &name); }
  uname_worker { do your worst; }

However, it's not clear how this fixes the actual problem.  We just
don't have a way to know what size the caller expects.

Having version or size info in structs like the Win32 API does in a
couple of cases makes a lot more sense now...


Corinna

  reply	other threads:[~2021-03-04 16:11 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-20 21:01 Marco Atzeri
2021-02-20 22:29 ` Takashi Yano
2021-02-28 18:48   ` Marco Atzeri
2021-03-01  0:55     ` Takashi Yano
2021-03-01  8:41       ` Takashi Yano
2021-03-01 11:26         ` Takashi Yano
2021-03-01 12:17           ` marco atzeri
2021-03-01 12:25       ` Takashi Yano
2021-03-02 11:03         ` Takashi Yano
2021-03-02 15:48           ` Corinna Vinschen
2021-03-03  9:56             ` Takashi Yano
2021-03-03 11:00               ` Corinna Vinschen
2021-03-04  9:05                 ` Mark Geisert
2021-03-04 16:11                   ` Corinna Vinschen [this message]
2021-03-05  9:18                     ` Mark Geisert
2021-03-05 14:37                       ` Corinna Vinschen
2021-03-04  9:05                 ` Takashi Yano
2021-03-04 11:11                   ` marco atzeri
2021-03-04 11:50                     ` Takashi Yano
2021-03-04 15:17                       ` Ken Brown
2021-03-04 15:54                         ` Corinna Vinschen
2021-03-04 20:17                         ` Marco Atzeri
2021-03-05  8:09                           ` Marco Atzeri
2021-03-05  9:11                             ` Mark Geisert
2021-03-05 14:42                               ` Corinna Vinschen
2021-03-05 16:30                                 ` Marco Atzeri
2021-03-06  1:45                                   ` Takashi Yano
2021-03-06 17:16                                     ` Ken Brown
2021-03-06 21:38                                       ` Mark Geisert
2021-03-05 22:55                                 ` Mark Geisert
2021-03-08 11:07                                   ` Mark Geisert
2021-03-08 14:01                                     ` Corinna Vinschen
2021-03-04 15:52                   ` Corinna Vinschen

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=YEEGw4P+vtzejGOv@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin@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).