Message ID | 20230429131354.2507443-4-bugaevc@gmail.com |
---|---|
State | New |
Headers | show |
Series | [1/7] hurd: Simplify _hurd_critical_section_lock a bit | expand |
Applied, thanks! Sergey Bugaev, le sam. 29 avril 2023 16:13:51 +0300, a ecrit: > If any of the early boot-up tasks calls exit () or returns from main (), > terminate it properly instead of crashing on trying to dereference > _hurd_ports and getting forcibly terminated by the kernel. > > We sadly cannot make the __USEPORT macro do the check for _hurd_ports > being unset, because it evaluates to the value of the expression > provided as the second argument, and that can be of any type; so there > is no single suitable fallback value for the macro to evaluate to in > case _hurd_ports is unset. Instead, each use site that wants to care for > this case will have to do its own checking. > > Checked on x86_64-gnu. \o/ > Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> > --- > sysdeps/mach/hurd/_exit.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/sysdeps/mach/hurd/_exit.c b/sysdeps/mach/hurd/_exit.c > index 73957744..80cfe532 100644 > --- a/sysdeps/mach/hurd/_exit.c > +++ b/sysdeps/mach/hurd/_exit.c > @@ -24,8 +24,9 @@ > void > _hurd_exit (int status) > { > - /* Give the proc server our exit status. */ > - __USEPORT (PROC, __proc_mark_exit (port, status, 0)); > + if (_hurd_ports != NULL) > + /* Give the proc server our exit status. */ > + __USEPORT (PROC, __proc_mark_exit (port, status, 0)); > > /* Commit suicide. */ > __task_terminate (__mach_task_self ()); > -- > 2.40.1 >
diff --git a/sysdeps/mach/hurd/_exit.c b/sysdeps/mach/hurd/_exit.c index 73957744..80cfe532 100644 --- a/sysdeps/mach/hurd/_exit.c +++ b/sysdeps/mach/hurd/_exit.c @@ -24,8 +24,9 @@ void _hurd_exit (int status) { - /* Give the proc server our exit status. */ - __USEPORT (PROC, __proc_mark_exit (port, status, 0)); + if (_hurd_ports != NULL) + /* Give the proc server our exit status. */ + __USEPORT (PROC, __proc_mark_exit (port, status, 0)); /* Commit suicide. */ __task_terminate (__mach_task_self ());
If any of the early boot-up tasks calls exit () or returns from main (), terminate it properly instead of crashing on trying to dereference _hurd_ports and getting forcibly terminated by the kernel. We sadly cannot make the __USEPORT macro do the check for _hurd_ports being unset, because it evaluates to the value of the expression provided as the second argument, and that can be of any type; so there is no single suitable fallback value for the macro to evaluate to in case _hurd_ports is unset. Instead, each use site that wants to care for this case will have to do its own checking. Checked on x86_64-gnu. Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> --- sysdeps/mach/hurd/_exit.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)