From: Pip Cet <pipcet@protonmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: sebastian@sebasmonia.com, kien.n.quang@gmail.com,
emacs-devel@gnu.org, yantar92@posteo.net
Subject: Re: MPS: Win64 testers?
Date: Thu, 22 Aug 2024 19:14:51 +0000 [thread overview]
Message-ID: <877cc88j4p.fsf@protonmail.com> (raw)
In-Reply-To: <861q2gs8xu.fsf@gnu.org>
"Eli Zaretskii" <eliz@gnu.org> writes:
>> Date: Thu, 22 Aug 2024 17:51:38 +0000
>> From: Pip Cet <pipcet@protonmail.com>
>> Cc: Quang Kien Nguyen <kien.n.quang@gmail.com>, Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org, Ihor Radchenko <yantar92@posteo.net>
>>
>> > I was running this version today:
>> >
>> > https://github.com/kiennq/emacs-build/releases/tag/v31.305.20240819.4794ea5
>> >
>> > Had two different crashes, hope that these backtraces are more useful
>> > (thanks again to Pip and Ihor for their help)
>>
>> Thank you, that's very useful. Indeed, it looks like the
>> Windows-specific code hands off a pointer to MPS-managed memory to
>> GNUTLS to use as a cookie, while other OSes use an FD number cast to an
>> intptr_t cast to void *.
>
I meant this code in gnutls.c:
if (proc->gnutls_initstage < GNUTLS_STAGE_TRANSPORT_POINTERS_SET)
{
# ifdef WINDOWSNT
/* On W32 we cannot transfer socket handles between different runtime
libraries, so we tell GnuTLS to use our special push/pull
functions. */
gnutls_transport_set_ptr2 (state,
(gnutls_transport_ptr_t) proc,
(gnutls_transport_ptr_t) proc);
gnutls_transport_set_push_function (state, &emacs_gnutls_push);
gnutls_transport_set_pull_function (state, &emacs_gnutls_pull);
# else
/* This is how GnuTLS takes sockets: as file descriptors passed
in. For an Emacs process socket, infd and outfd are the
same but we use this two-argument version for clarity. */
gnutls_transport_set_ptr2 (state,
(void *) (intptr_t) proc->infd,
(void *) (intptr_t) proc->outfd);
if (proc->is_non_blocking_client)
gnutls_transport_set_errno_function (state,
emacs_gnutls_nonblock_errno);
# endif
proc->gnutls_initstage = GNUTLS_STAGE_TRANSPORT_POINTERS_SET;
}
That hands a pointer to 'proc' to gnutls, and if 'proc' subsequently
moves, emacs_gnutls_push or emacs_gnutls_pull will try to dereference a
stale pointer.
> You are talking about this line in emacs_gnutls_pull:
>
> emacs_gnutls_transport_set_errno (process->gnutls_state,
> errno == EWOULDBLOCK ? EAGAIN : errno);
>
> which causes us to call GnuTLS thusly:
>
> gnutls_transport_set_errno (state, err);
>
> is that right?
> Does this mean we will have to audit all our calls to
> external libraries and make sure we never pass to them any part of any
> Lisp object? That's a tough requirement; it's very easy to miss some
> such use, which then triggers segfaults. Am I missing something?
Synchronous calls do not need to be changed, only asynchronous callbacks
that currently use a pointer to a Lisp object as their cookie.
> Btw, I tried using EWW in my MinGW MPS build, and it didn't crash. Is
> it possible to have a reproducible recipe for this?
I'll try coming up with one, though that's probably just going to mean
adding (igc-collect) after the gnutls handshake somewhere in the Lisp
code.
By the way, I fully agree more debugging information would be helpful.
Pip
next prev parent reply other threads:[~2024-08-22 19:14 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-06 3:04 MPS: Win64 testers? Quang Kien Nguyen
2024-08-06 7:03 ` Quang Kien Nguyen
2024-08-06 11:40 ` Eli Zaretskii
2024-08-06 17:39 ` Quang Kien Nguyen
2024-08-06 18:32 ` Eli Zaretskii
2024-08-06 20:52 ` Quang Kien Nguyen
2024-08-07 11:41 ` Eli Zaretskii
2024-08-07 18:32 ` Quang Kien Nguyen
2024-08-08 5:46 ` Eli Zaretskii
2024-08-08 23:44 ` Quang Kien Nguyen
2024-08-09 6:00 ` Eli Zaretskii
2024-08-09 6:10 ` Eli Zaretskii
2024-08-09 9:19 ` Quang Kien Nguyen
2024-08-09 11:03 ` Eli Zaretskii
2024-08-13 12:12 ` Quang Kien Nguyen
2024-08-13 12:37 ` Eli Zaretskii
2024-08-13 15:51 ` Pip Cet
2024-08-13 18:26 ` Quang Kien Nguyen
2024-08-13 19:19 ` Eli Zaretskii
2024-08-13 20:22 ` Quang Kien Nguyen
2024-08-14 13:11 ` Sebastián Monía
2024-08-14 17:24 ` Quang Kien Nguyen
2024-08-16 20:09 ` Sebastián Monía
2024-08-17 11:37 ` Sebastián Monía
2024-08-17 12:54 ` Eli Zaretskii
2024-08-17 13:24 ` Sebastián Monía
2024-08-19 14:34 ` Sebastián Monía
2024-08-19 14:55 ` Eli Zaretskii
2024-08-19 15:12 ` Pip Cet
2024-08-19 15:23 ` Sebastián Monía
2024-08-19 15:31 ` Quang Kien Nguyen
2024-08-19 16:23 ` Quang Kien Nguyen
2024-08-21 18:14 ` Sebastián Monía
2024-08-21 18:20 ` Pip Cet
2024-08-21 19:46 ` Sebastián Monía
2024-08-21 18:22 ` Ihor Radchenko
2024-08-21 19:48 ` Sebastián Monía
2024-08-22 17:34 ` Sebastián Monía
2024-08-22 17:51 ` Pip Cet
2024-08-22 18:34 ` Eli Zaretskii
2024-08-22 19:12 ` Quang Kien Nguyen
2024-08-23 5:32 ` Eli Zaretskii
2024-08-22 19:14 ` Pip Cet [this message]
2024-08-23 5:38 ` Eli Zaretskii
2024-08-23 7:59 ` Pip Cet
2024-08-23 13:08 ` Eli Zaretskii
2024-08-23 13:42 ` Quang Kien Nguyen
2024-08-23 13:48 ` Pip Cet
2024-08-23 14:35 ` Eli Zaretskii
2024-08-23 14:54 ` Quang Kien Nguyen
2024-08-23 16:08 ` Eli Zaretskii
[not found] ` <CAL7sU5g7BrbrPL-B120NtVKkpnMuqmyuwDd_Kp50F1p8Gc3N0g@mail.gmail.com>
[not found] ` <86ikvrp2hz.fsf@gnu.org>
2024-08-23 17:45 ` Windows low-level keyboard hook Quang Kien Nguyen
2024-08-23 18:23 ` MPS: Win64 testers? Sebastián Monía
2024-08-23 13:44 ` Pip Cet
2024-08-23 14:32 ` Eli Zaretskii
2024-08-23 15:51 ` Pip Cet
2024-08-23 16:17 ` Eli Zaretskii
2024-08-23 18:57 ` Pip Cet
2024-08-23 19:28 ` Eli Zaretskii
2024-08-24 17:31 ` Pip Cet
2024-08-25 3:17 ` Quang Kien Nguyen
2024-08-30 19:59 ` Sebastián Monía
2024-09-01 8:21 ` Kien Nguyen
2024-09-01 8:43 ` Eli Zaretskii
2024-09-01 9:36 ` Kien Nguyen
2024-09-01 10:28 ` Eli Zaretskii
2024-09-01 11:59 ` Eli Zaretskii
2024-09-01 18:54 ` Kien Nguyen
2024-09-01 19:27 ` Eli Zaretskii
2024-09-01 19:44 ` Pip Cet
2024-09-01 21:42 ` Kien Nguyen
2024-09-02 11:08 ` Eli Zaretskii
2024-09-03 4:12 ` Kien Nguyen
2024-09-03 10:37 ` Pip Cet
2024-09-03 16:50 ` Kien Nguyen
2024-09-03 17:48 ` Pip Cet
2024-09-07 8:19 ` Eli Zaretskii
2024-09-01 10:49 ` Pip Cet
2024-09-01 12:15 ` Kien Nguyen
2024-08-22 18:11 ` Eli Zaretskii
2024-08-22 19:17 ` Sebastián Monía
2024-08-23 5:45 ` Eli Zaretskii
2024-08-07 19:50 ` Pip Cet
2024-08-07 23:14 ` Quang Kien Nguyen
2024-08-08 5:15 ` Eli Zaretskii
2024-08-06 14:18 ` Pip Cet
2024-08-07 11:03 ` Eli Zaretskii
-- strict thread matches above, loose matches on Subject: below --
2024-07-25 9:45 Angelo Graziosi
2024-07-25 10:02 ` Stefan Kangas
2024-07-25 11:35 ` Eli Zaretskii
2024-07-27 14:22 ` Angelo Graziosi
2024-07-24 15:45 Pip Cet
2024-07-25 7:16 ` Eli Zaretskii
2024-07-25 15:39 ` Pip Cet
2024-07-27 8:02 ` Eli Zaretskii
2024-07-27 10:42 ` Pip Cet
2024-07-27 12:14 ` Eli Zaretskii
2024-07-27 15:49 ` Pip Cet
2024-07-27 16:10 ` Eli Zaretskii
2024-07-27 16:56 ` Eli Zaretskii
2024-07-27 18:27 ` Pip Cet
2024-07-27 18:50 ` Eli Zaretskii
2024-07-27 20:22 ` Pip Cet
2024-07-28 5:25 ` Eli Zaretskii
2024-07-28 13:00 ` Pip Cet
2024-07-28 14:20 ` Eli Zaretskii
2024-07-28 15:00 ` Pip Cet
2024-07-28 15:20 ` Eli Zaretskii
2024-07-28 20:22 ` Pip Cet
2024-07-29 11:25 ` Eli Zaretskii
2024-07-31 6:18 ` Pip Cet
2024-07-31 14:02 ` Eli Zaretskii
2024-07-31 19:04 ` Sebastián Monía
2024-08-01 5:00 ` Eli Zaretskii
2024-08-03 7:50 ` pipcet
2024-08-03 9:23 ` Eli Zaretskii
2024-08-03 15:17 ` pipcet
2024-08-03 16:07 ` Eli Zaretskii
2024-07-27 16:09 ` Michael Albinus
2024-07-28 13:22 ` Pip Cet
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877cc88j4p.fsf@protonmail.com \
--to=pipcet@protonmail.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=kien.n.quang@gmail.com \
--cc=sebastian@sebasmonia.com \
--cc=yantar92@posteo.net \
/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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).