all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Pip Cet <pipcet@protonmail.com>
Cc: sebastian@sebasmonia.com, kien.n.quang@gmail.com,
	emacs-devel@gnu.org, yantar92@posteo.net
Subject: Re: MPS: Win64 testers?
Date: Fri, 23 Aug 2024 08:38:46 +0300	[thread overview]
Message-ID: <86seuvre6x.fsf@gnu.org> (raw)
In-Reply-To: <877cc88j4p.fsf@protonmail.com> (message from Pip Cet on Thu, 22 Aug 2024 19:14:51 +0000)

> Date: Thu, 22 Aug 2024 19:14:51 +0000
> From: Pip Cet <pipcet@protonmail.com>
> Cc: sebastian@sebasmonia.com, kien.n.quang@gmail.com, emacs-devel@gnu.org, yantar92@posteo.net
> 
> "Eli Zaretskii" <eliz@gnu.org> writes:
> 
> 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.

But the pointer to 'proc' is passed to GnuTLS for the sole purpose
that GnuTLS passes it back to our callback, emacs_gnutls_pull.  GnuTLS
itself does not (and cannot) use that pointer, for the obvious reasons
that it knows nothing about our objects.

> > 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.

But emacs_gnutls_pull is not an asynchronous call, it is called when
Emacs calls GnuTLS to read from the connection.  So how this could be
a problem?

And what do you mean by "asynchronous calls"?  For example, you can
see in w32font.c that we call certain Windows APIs which work by
enumerating objects of some kind and calling our callback for each
such object (the callback that does with each object what it needs to
do).  Is this an "asynchronous call"?  If not, what is?

> > 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.

Thanks.

But a clear understanding of what causes these segfaults is also
needed, because Emacs is full of similar callbacks, especially on
Windows, where many APIs we use work with callbacks.



  reply	other threads:[~2024-08-23  5:38 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
2024-08-23  5:38                                                                     ` Eli Zaretskii [this message]
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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86seuvre6x.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=kien.n.quang@gmail.com \
    --cc=pipcet@protonmail.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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.