From 17e3ddc9933714bd053ce70afd6d575a774aee60 Mon Sep 17 00:00:00 2001 From: cheloha Date: Fri, 3 Nov 2023 19:16:31 +0000 Subject: [PATCH] timeout(1): align execvp(3) failure statuses with GNU timeout Align our exit statuses with those of GNU timeout in the execvp(3) failure case. Exit with 127 if the utility is not found. Exit with 126 if we cannot execute the utility for any other reason. While here, the child should _exit(2) instead of calling exit(3) via err(3). Update the manpage accordingly. With input from millert@ and deraadt@. Link: https://marc.info/?l=openbsd-tech&m=169739592322978&w=2 ok millert@ --- usr.bin/timeout/timeout.1 | 35 ++++++++++++++++++++++------------- usr.bin/timeout/timeout.c | 5 +++-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/usr.bin/timeout/timeout.1 b/usr.bin/timeout/timeout.1 index d99ceac62e9..6a77deb6dab 100644 --- a/usr.bin/timeout/timeout.1 +++ b/usr.bin/timeout/timeout.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: timeout.1,v 1.7 2023/01/12 14:08:39 jmc Exp $ +.\" $OpenBSD: timeout.1,v 1.8 2023/11/03 19:16:31 cheloha Exp $ .\" $NetBSD: timeout.1,v 1.4 2016/10/13 06:22:26 dholland Exp $ .\" .\" Copyright (c) 2014 Baptiste Daroussin @@ -27,7 +27,7 @@ .\" .\" $FreeBSD: head/usr.bin/timeout/timeout.1 268861 2014-07-18 22:56:59Z bapt $ .\" -.Dd $Mdocdate: January 12 2023 $ +.Dd $Mdocdate: November 3 2023 $ .Dt TIMEOUT 1 .Os .Sh NAME @@ -92,20 +92,29 @@ hours days .El .Sh EXIT STATUS -If the timeout was not reached or -.Fl p -was set, the exit status of -.Ar command -is returned. +The +.Nm +utility may return one of the following statuses: .Pp -If the timeout was reached and +.Bl -tag -width indent -compact +.It 124 +The time limit expired and the .Fl p -was not set, an exit status of 124 is returned. -.Pp -If +flag was not set. +.It 126 +The +.Ar command +was found but could not be executed. +.It 127 +The .Ar command -exited after receiving a signal, the exit status returned is the signal number -plus 128. +was not found. +.El +.Pp +Otherwise, +.Nm +returns the exit status of the +.Ar command . .Sh SEE ALSO .Xr kill 1 , .Xr signal 3 diff --git a/usr.bin/timeout/timeout.c b/usr.bin/timeout/timeout.c index fb4d9c81970..0bf7d5d41c5 100644 --- a/usr.bin/timeout/timeout.c +++ b/usr.bin/timeout/timeout.c @@ -1,4 +1,4 @@ -/* $OpenBSD: timeout.c,v 1.25 2023/01/13 06:53:04 cheloha Exp $ */ +/* $OpenBSD: timeout.c,v 1.26 2023/11/03 19:16:31 cheloha Exp $ */ /* * Copyright (c) 2021 Job Snijders @@ -260,7 +260,8 @@ main(int argc, char **argv) signal(SIGTTOU, SIG_DFL); execvp(argv[0], argv); - err(1, "%s", argv[0]); + warn("%s", argv[0]); + _exit(errno == ENOENT ? 127 : 126); } /* parent continues here */ -- 2.20.1