Module Name:    src
Committed By:   riastradh
Date:           Wed Jun 16 23:22:08 UTC 2021

Modified Files:
        src/sbin/cgdconfig: cgdconfig.c

Log Message:
cgdconfig(8): Fail more gracefully than SIGSEGV if shell_cmd fails.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sbin/cgdconfig/cgdconfig.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/cgdconfig/cgdconfig.c
diff -u src/sbin/cgdconfig/cgdconfig.c:1.51 src/sbin/cgdconfig/cgdconfig.c:1.52
--- src/sbin/cgdconfig/cgdconfig.c:1.51	Sun Apr 18 19:56:09 2021
+++ src/sbin/cgdconfig/cgdconfig.c	Wed Jun 16 23:22:08 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: cgdconfig.c,v 1.51 2021/04/18 19:56:09 maya Exp $ */
+/* $NetBSD: cgdconfig.c,v 1.52 2021/06/16 23:22:08 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2002, 2003 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 2002, 2003\
  The NetBSD Foundation, Inc.  All rights reserved.");
-__RCSID("$NetBSD: cgdconfig.c,v 1.51 2021/04/18 19:56:09 maya Exp $");
+__RCSID("$NetBSD: cgdconfig.c,v 1.52 2021/06/16 23:22:08 riastradh Exp $");
 #endif
 
 #include <err.h>
@@ -460,10 +460,14 @@ getkey_shell_cmd(const char *target, str
 {
 	FILE	*f;
 	bits_t	*ret;
+	int	status;
 
-	f = popen(string_tocharstar(kg->kg_cmd), "r");
-	ret = bits_fget(f, keylen);
-	pclose(f);
+	if ((f = popen(string_tocharstar(kg->kg_cmd), "r")) == NULL)
+		errx(1, "command failed");
+	if ((ret = bits_fget(f, keylen)) == NULL)
+		errx(1, "command output too short");
+	if ((status = pclose(f)) != 0)
+		err(1, "command failed with status %d", status);
 
 	return ret;
 }

Reply via email to