summaryrefslogtreecommitdiffstats
path: root/libexec
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2021-01-02 20:32:20 +0000
committermillert <millert@openbsd.org>2021-01-02 20:32:20 +0000
commit07817e4bdc8b6868189ab279749fa0d1c77e97fb (patch)
treee4d4b7af2c325ba352ce7294f353e88da1600beb /libexec
parentImport libc++abi 10.0.1 release. (diff)
downloadwireguard-openbsd-07817e4bdc8b6868189ab279749fa0d1c77e97fb.tar.xz
wireguard-openbsd-07817e4bdc8b6868189ab279749fa0d1c77e97fb.zip
Check auth_mkvalue(3) return value for NULL (malloc failure).
For constant strings we don't actually need to use auth_mkvalue(3). Problem reported by Ross L Richardson.
Diffstat (limited to 'libexec')
-rw-r--r--libexec/login_passwd/login_passwd.c5
-rw-r--r--libexec/login_radius/login_radius.c32
-rw-r--r--libexec/login_skey/login_skey.c12
-rw-r--r--libexec/login_token/login_token.c12
4 files changed, 41 insertions, 20 deletions
diff --git a/libexec/login_passwd/login_passwd.c b/libexec/login_passwd/login_passwd.c
index 92790494489..df83a825d76 100644
--- a/libexec/login_passwd/login_passwd.c
+++ b/libexec/login_passwd/login_passwd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: login_passwd.c,v 1.18 2020/05/15 17:25:39 millert Exp $ */
+/* $OpenBSD: login_passwd.c,v 1.19 2021/01/02 20:32:20 millert Exp $ */
/*-
* Copyright (c) 1995 Berkeley Software Design, Inc. All rights reserved.
@@ -49,7 +49,6 @@
#include <util.h>
#include <login_cap.h>
-#include <bsd_auth.h>
int
main(int argc, char *argv[])
@@ -121,7 +120,7 @@ main(int argc, char *argv[])
}
if (wheel != NULL && strcmp(wheel, "yes") != 0) {
fprintf(back, BI_VALUE " errormsg %s\n",
- auth_mkvalue("you are not in group wheel"));
+ "you are not in group wheel");
fprintf(back, BI_REJECT "\n");
exit(1);
}
diff --git a/libexec/login_radius/login_radius.c b/libexec/login_radius/login_radius.c
index 9b00f973133..6e38ba7c138 100644
--- a/libexec/login_radius/login_radius.c
+++ b/libexec/login_radius/login_radius.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: login_radius.c,v 1.9 2017/04/27 20:55:52 millert Exp $ */
+/* $OpenBSD: login_radius.c,v 1.10 2021/01/02 20:32:20 millert Exp $ */
/*-
* Copyright (c) 1996, 1997 Berkeley Software Design, Inc. All rights reserved.
@@ -183,19 +183,29 @@ main(int argc, char **argv)
strcmp(service, "login") ? challenge : NULL, password, &emsg);
if (c == 0) {
- if (*challenge == '\0')
+ if (*challenge == '\0') {
(void)fprintf(back, BI_AUTH "\n");
- else {
- (void)fprintf(back, BI_VALUE " challenge %s\n",
- auth_mkvalue(challenge));
- (void)fprintf(back, BI_CHALLENGE "\n");
+ exit(0);
+ } else {
+ char *val = auth_mkvalue(challenge);
+ if (val != NULL) {
+ (void)fprintf(back, BI_VALUE " challenge %s\n",
+ val);
+ (void)fprintf(back, BI_CHALLENGE "\n");
+ exit(0);
+ }
+ emsg = "unable to allocate memory";
+ }
+ }
+ if (emsg != NULL) {
+ if (strcmp(service, "login") == 0) {
+ (void)fprintf(stderr, "%s\n", emsg);
+ } else {
+ emsg = auth_mkvalue(emsg);
+ (void)fprintf(back, BI_VALUE " errormsg %s\n",
+ emsg ? emsg : "unable to allocate memory");
}
- exit(0);
}
- if (emsg && strcmp(service, "login") == 0)
- (void)fprintf(stderr, "%s\n", emsg);
- else if (emsg)
- (void)fprintf(back, "value errormsg %s\n", auth_mkvalue(emsg));
if (strcmp(service, "challenge") == 0) {
(void)fprintf(back, BI_SILENT "\n");
exit(0);
diff --git a/libexec/login_skey/login_skey.c b/libexec/login_skey/login_skey.c
index 11a3bae3503..f57f76ebc73 100644
--- a/libexec/login_skey/login_skey.c
+++ b/libexec/login_skey/login_skey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: login_skey.c,v 1.28 2019/06/28 13:32:53 deraadt Exp $ */
+/* $OpenBSD: login_skey.c,v 1.29 2021/01/02 20:32:20 millert Exp $ */
/*
* Copyright (c) 2000, 2001, 2004 Todd C. Miller <millert@openbsd.org>
@@ -157,8 +157,14 @@ main(int argc, char *argv[])
case MODE_CHALLENGE:
haskey = (skeychallenge2(fd, &skey, user, challenge) == 0);
strlcat(challenge, "\nS/Key Password:", sizeof(challenge));
- fprintf(back, BI_VALUE " challenge %s\n",
- auth_mkvalue(challenge));
+ cp = auth_mkvalue(challenge);
+ if (cp == NULL) {
+ (void)fprintf(back, BI_VALUE " errormsg %s\n",
+ "unable to allocate memory");
+ (void)fprintf(back, BI_REJECT "\n");
+ exit(1);
+ }
+ fprintf(back, BI_VALUE " challenge %s\n", cp);
fprintf(back, BI_CHALLENGE "\n");
if (haskey) {
fprintf(back, BI_FDPASS "\n");
diff --git a/libexec/login_token/login_token.c b/libexec/login_token/login_token.c
index 0ee7d2cdda4..6f11b54f6cd 100644
--- a/libexec/login_token/login_token.c
+++ b/libexec/login_token/login_token.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: login_token.c,v 1.16 2019/06/28 13:32:53 deraadt Exp $ */
+/* $OpenBSD: login_token.c,v 1.17 2021/01/02 20:32:20 millert Exp $ */
/*-
* Copyright (c) 1995, 1996 Berkeley Software Design, Inc. All rights reserved.
@@ -152,8 +152,14 @@ main(int argc, char *argv[])
tt->proper);
(void)sigprocmask(SIG_UNBLOCK, &blockset, NULL);
if (mode == 1) {
- fprintf(back, BI_VALUE " challenge %s\n",
- auth_mkvalue(challenge));
+ char *val = auth_mkvalue(challenge);
+ if (val == NULL) {
+ (void)fprintf(back, BI_VALUE " errormsg %s\n",
+ "unable to allocate memory");
+ (void)fprintf(back, BI_REJECT "\n");
+ exit(1);
+ }
+ fprintf(back, BI_VALUE " challenge %s\n", val);
fprintf(back, BI_CHALLENGE "\n");
exit(0);
}