Revert "Cygwin: Make sure newer apps get uname_x even when loading uname dynamically"

This reverts commit 532b91d24e.

It turned out that this patch has undesired side effects.  To wit, if a
newer, post-uname_x executable was linked against or loading an older,
pre-uname_x DLL, and this DLL called uname.  This call would jump into
the old uname with the old struct utsname as parameter, but given the
newer executable it would get redirected to uname_x.  uname_x in turn
would overwrite stack memory it should leave well alone, given it
expects the newer, larger struct utsname.

For the entire discussion see the thread starting at
https://cygwin.com/pipermail/cygwin/2021-February/247870.html
and continuing in March at
https://cygwin.com/pipermail/cygwin/2021-March/247930.html
For a description where we're coming from, see
https://cygwin.com/pipermail/cygwin/2021-March/247959.html

While we *could* make the scenario in question work by patching dlsym,
the problem would actually be the same, just for dynamic loading.  In
the end, we're missing the information, which Cygwin version has been
used when building DLLs.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2021-03-07 12:17:57 +01:00
parent 1debd4d635
commit 582628d551
2 changed files with 0 additions and 10 deletions

View File

@ -74,9 +74,6 @@ details. */
#define CYGWIN_VERSION_CHECK_FOR_EXTRA_TM_MEMBERS \
(CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 272)
#define CYGWIN_VERSION_CHECK_FOR_UNAME_X \
(CYGWIN_VERSION_USER_API_VERSION_COMBINED >= 335)
#define CYGWIN_VERSION_CYGWIN_CONV 181
/* API_MAJOR 0.0: Initial version. API_MINOR changes:

View File

@ -92,14 +92,7 @@ struct old_utsname
extern "C" int
uname (struct utsname *in_name)
{
/* This occurs if the application fetches the uname symbol dynamically.
We must call uname_x for newer API versions, otherwise the idea of
struct utsname doesn't match. */
if (CYGWIN_VERSION_CHECK_FOR_UNAME_X)
return uname_x (in_name);
struct old_utsname *name = (struct old_utsname *) in_name;
__try
{
char *snp = strstr (cygwin_version.dll_build_date, "SNP");