[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH hurd 2/3] Replace deprecated sigmask with sigset_t calls
From: |
Samuel Thibault |
Subject: |
Re: [PATCH hurd 2/3] Replace deprecated sigmask with sigset_t calls |
Date: |
Fri, 29 Dec 2023 17:41:46 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Flavio Cruz, le ven. 29 déc. 2023 11:12:10 -0500, a ecrit:
> ---
> exec/hashexec.c | 9 +++++++--
> libdiskfs/disk-pager.c | 4 +++-
> libpager/pager-memcpy.c | 11 ++++++++---
> libstore/memobj.c | 11 ++++++++---
> startup/startup.c | 9 ++++++---
> 5 files changed, 32 insertions(+), 12 deletions(-)
>
> diff --git a/exec/hashexec.c b/exec/hashexec.c
> index 9e00704..a107291 100644
> --- a/exec/hashexec.c
> +++ b/exec/hashexec.c
> @@ -53,6 +53,11 @@ check_hashbang (struct execdata *e,
> size_t new_argvlen;
> mach_port_t *new_dtable = NULL;
> mach_msg_type_number_t new_dtablesize;
> + sigset_t arg_env_sigset;
> +
> + sigemptyset (&arg_env_sigset);
> + sigaddset (&arg_env_sigset, SIGSEGV);
> + sigaddset (&arg_env_sigset, SIGBUS);
>
> file_t user_fd (int fd)
> {
> @@ -293,7 +298,7 @@ check_hashbang (struct execdata *e,
> if (strchr (name, '/') != NULL)
> error = lookup (name, 0, &name_file);
> else if ((error = hurd_catch_signal
> - (sigmask (SIGBUS) | sigmask (SIGSEGV),
> + (arg_env_sigset,
> (vm_address_t) envp, (vm_address_t) envp + envplen,
> &search_path, SIG_ERR)))
> name_file = MACH_PORT_NULL;
> @@ -416,7 +421,7 @@ check_hashbang (struct execdata *e,
> }
>
> /* Set up the arguments. */
> - hurd_catch_signal (sigmask (SIGSEGV) | sigmask (SIGBUS),
> + hurd_catch_signal (arg_env_sigset,
> (vm_address_t) argv, (vm_address_t) argv + argvlen,
> &setup_args, &fault_handler);
> }
> diff --git a/libdiskfs/disk-pager.c b/libdiskfs/disk-pager.c
> index 1a5d8bf..7af0e3b 100644
> --- a/libdiskfs/disk-pager.c
> +++ b/libdiskfs/disk-pager.c
> @@ -29,7 +29,6 @@ struct pager_requests *diskfs_disk_pager_requests;
> static void fault_handler (int sig, long int sigcode, struct sigcontext
> *scp);
> static struct hurd_signal_preemptor preemptor =
> {
> - signals: sigmask (SIGSEGV) | sigmask (SIGBUS),
> preemptor: NULL,
> handler: (sighandler_t) &fault_handler,
> };
> @@ -73,6 +72,9 @@ diskfs_start_disk_pager (struct user_pager_info *upi,
> /* Set up the signal preemptor to catch faults on the disk image. */
> preemptor.first = (vm_address_t) *image;
> preemptor.last = ((vm_address_t) *image + size);
> + sigemptyset (&preemptor.signals);
> + sigaddset (&preemptor.signals, SIGSEGV);
> + sigaddset (&preemptor.signals, SIGBUS);
> hurd_preempt_signals (&preemptor);
>
> /* We have the mapping; we no longer need the send right. */
> diff --git a/libpager/pager-memcpy.c b/libpager/pager-memcpy.c
> index caaf6f2..2ef42a7 100644
> --- a/libpager/pager-memcpy.c
> +++ b/libpager/pager-memcpy.c
> @@ -208,9 +208,14 @@ pager_memcpy (struct pager *pager, memory_object_t
> memobj,
> window_size = 0;
>
> if (sigsetjmp (buf, 1) == 0)
> - hurd_catch_signal (sigmask (SIGSEGV) | sigmask (SIGBUS),
> - window, window + window_size,
> - &do_copy, (sighandler_t) &fault);
> + {
> + sigset_t mask;
> + sigemptyset (&mask);
> + sigaddset (&mask, SIGSEGV);
> + sigaddset (&mask, SIGBUS);
> + hurd_catch_signal (mask, window, window + window_size,
> + &do_copy, (sighandler_t) &fault);
> + }
>
> if (! err)
> assert_backtrace (n == 0);
> diff --git a/libstore/memobj.c b/libstore/memobj.c
> index ea2d7b9..e98e1b2 100644
> --- a/libstore/memobj.c
> +++ b/libstore/memobj.c
> @@ -113,9 +113,14 @@ memobj_memcpy (memory_object_t memobj,
> return 0;
>
> if (sigsetjmp (buf, 1) == 0)
> - hurd_catch_signal (sigmask (SIGSEGV) | sigmask (SIGBUS),
> - window, window + windowsize,
> - ©, (sighandler_t) &fault);
> + {
> + sigset_t mask;
> + sigemptyset (&mask);
> + sigaddset (&mask, SIGSEGV);
> + sigaddset (&mask, SIGBUS);
> + hurd_catch_signal (mask, window, window + windowsize,
> + ©, (sighandler_t) &fault);
> + }
>
> if (window)
> munmap ((caddr_t) window, windowsize);
> diff --git a/startup/startup.c b/startup/startup.c
> index 862572c..27af818 100644
> --- a/startup/startup.c
> +++ b/startup/startup.c
> @@ -826,9 +826,12 @@ main (int argc, char **argv, char **envp)
> /* All programs we start should ignore job control stop signals.
> That way Posix.1 B.2.2.2 is satisfied where it says that programs
> not run under job control shells are protected. */
> - default_ints[INIT_SIGIGN] = (sigmask (SIGTSTP)
> - | sigmask (SIGTTIN)
> - | sigmask (SIGTTOU));
> + sigset_t sigmask;
> + sigemptyset (&sigmask);
> + sigaddset (&sigmask, SIGTSTP);
> + sigaddset (&sigmask, SIGTTIN);
> + sigaddset (&sigmask, SIGTTOU);
> + default_ints[INIT_SIGIGN] = sigmask;
>
> default_ports[INIT_PORT_BOOTSTRAP] = startup;
> run ("/hurd/proc", default_ports, &proctask, proc_insert_ports);
> --
> 2.39.2
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.