Module Name: src Committed By: mrg Date: Mon Feb 4 08:21:12 UTC 2019
Modified Files: src/lib/libintl: gettext.c src/sbin/iscsid: iscsid_main.c src/usr.sbin/npf/npfd: npfd_log.c Log Message: check for snprintf() truncation and fail sanely if so, rather than attempting to use a file that won't exist or isn't secure. To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/lib/libintl/gettext.c cvs rdiff -u -r1.11 -r1.12 src/sbin/iscsid/iscsid_main.c cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/npf/npfd/npfd_log.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libintl/gettext.c diff -u src/lib/libintl/gettext.c:1.29 src/lib/libintl/gettext.c:1.30 --- src/lib/libintl/gettext.c:1.29 Fri May 29 12:26:28 2015 +++ src/lib/libintl/gettext.c Mon Feb 4 08:21:11 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: gettext.c,v 1.29 2015/05/29 12:26:28 christos Exp $ */ +/* $NetBSD: gettext.c,v 1.30 2019/02/04 08:21:11 mrg Exp $ */ /*- * Copyright (c) 2000, 2001 Citrus Project, @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: gettext.c,v 1.29 2015/05/29 12:26:28 christos Exp $"); +__RCSID("$NetBSD: gettext.c,v 1.30 2019/02/04 08:21:11 mrg Exp $"); #include <sys/param.h> #include <sys/stat.h> @@ -329,8 +329,10 @@ lookup_mofile(char *buf, size_t len, con continue; #endif - snprintf(buf, len, "%s/%s/%s/%s.mo", dir, p, + int rv = snprintf(buf, len, "%s/%s/%s/%s.mo", dir, p, category, domainname); + if (rv > (int)len) + return NULL; if (stat(buf, &st) < 0) continue; if ((st.st_mode & S_IFMT) != S_IFREG) @@ -942,7 +944,7 @@ dcngettext(const char *domainname, const unsigned long int n, int category) { const char *msgid; - char path[PATH_MAX]; + char path[PATH_MAX+1]; const char *lpath; static char olpath[PATH_MAX]; const char *cname = NULL; Index: src/sbin/iscsid/iscsid_main.c diff -u src/sbin/iscsid/iscsid_main.c:1.11 src/sbin/iscsid/iscsid_main.c:1.12 --- src/sbin/iscsid/iscsid_main.c:1.11 Mon May 30 21:58:32 2016 +++ src/sbin/iscsid/iscsid_main.c Mon Feb 4 08:21:12 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: iscsid_main.c,v 1.11 2016/05/30 21:58:32 mlelstv Exp $ */ +/* $NetBSD: iscsid_main.c,v 1.12 2019/02/04 08:21:12 mrg Exp $ */ /*- * Copyright (c) 2005,2006,2011 The NetBSD Foundation, Inc. @@ -90,6 +90,7 @@ create_node_name(void) uint32_t hid = 0; size_t siz; int mib[2]; + int total; unsigned char *s; (void) memset(&snp, 0x0, sizeof(snp)); @@ -109,8 +110,12 @@ create_node_name(void) for (s = snp.InitiatorAlias; *s; s++) if (!isalnum((unsigned char) *s) && *s != '-' && *s != '.' && *s != ':') *s = '-'; - snprintf((char *)snp.InitiatorName, sizeof(snp.InitiatorName), + total = snprintf((char *)snp.InitiatorName, sizeof(snp.InitiatorName), "iqn.1994-04.org.netbsd:iscsi.%s:%u", snp.InitiatorAlias, hid); + if ((size_t)total > sizeof(snp.InitiatorName)) { + printf("Warning: iSCSI Node InitiatorName too long to set InitiatorAlias!\n"); + return ISCSID_STATUS_NO_INITIATOR_NAME; + } ioctl(driver, ISCSI_SET_NODE_NAME, &snp); return snp.status; Index: src/usr.sbin/npf/npfd/npfd_log.c diff -u src/usr.sbin/npf/npfd/npfd_log.c:1.12 src/usr.sbin/npf/npfd/npfd_log.c:1.13 --- src/usr.sbin/npf/npfd/npfd_log.c:1.12 Mon Oct 16 11:17:45 2017 +++ src/usr.sbin/npf/npfd/npfd_log.c Mon Feb 4 08:21:12 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: npfd_log.c,v 1.12 2017/10/16 11:17:45 christos Exp $ */ +/* $NetBSD: npfd_log.c,v 1.13 2019/02/04 08:21:12 mrg Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: npfd_log.c,v 1.12 2017/10/16 11:17:45 christos Exp $"); +__RCSID("$NetBSD: npfd_log.c,v 1.13 2019/02/04 08:21:12 mrg Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -190,7 +190,9 @@ fix: rename: fclose(fp); char tmp[MAXPATHLEN]; - snprintf(tmp, sizeof(tmp), "%s.XXXXXX", ctx->path); + if (snprintf(tmp, sizeof(tmp), "%s.XXXXXX", ctx->path) > MAXPATHLEN) + syslog(LOG_ERR, "Temp file truncated: `%s' does not fit", + ctx->path); int fd; if ((fd = mkstemp(tmp)) == -1) { syslog(LOG_ERR, "Can't make temp file `%s': %m", tmp);