svn commit: r357859 - head/usr.sbin/sesutil

Alan Somers asomers at FreeBSD.org
Thu Feb 13 15:28:56 UTC 2020


Author: asomers
Date: Thu Feb 13 15:28:56 2020
New Revision: 357859
URL: https://svnweb.freebsd.org/changeset/base/357859

Log:
  sesutil: fix Coverity CIDs
  
  * 1411604: file descriptor leak
  * 1411586: memory leaks, null dereference on ENOMEM
  
  Reported by:	Coverity Scan
  Coverity CIDs:	1411604, 1411586
  Reviewed by:	trasz
  MFC after:	2 weeks
  Sponsored by:	Axcient
  Differential Revision:	https://reviews.freebsd.org/D23651

Modified:
  head/usr.sbin/sesutil/sesutil.c

Modified: head/usr.sbin/sesutil/sesutil.c
==============================================================================
--- head/usr.sbin/sesutil/sesutil.c	Thu Feb 13 15:14:46 2020	(r357858)
+++ head/usr.sbin/sesutil/sesutil.c	Thu Feb 13 15:28:56 2020	(r357859)
@@ -570,17 +570,17 @@ fetch_device_details(char *devnames, char **model, cha
 {
 	char ident[DISK_IDENT_SIZE];
 	struct diocgattr_arg arg;
-	char *device, *tmp;
+	char *tmp;
 	off_t mediasize;
+	int comma;
 	int fd;
 
-	tmp = strdup(devnames);
+	comma = (int)strcspn(devnames, ",");
+	asprintf(&tmp, "/dev/%.*s", comma, devnames);
 	if (tmp == NULL)
-		err(1, "strdup");
-
-	device = strsep(&tmp, ",");
-	asprintf(&tmp, "/dev/%s", device);
+		err(1, "asprintf");
 	fd = open(tmp, O_RDONLY);
+	free(tmp);
 	if (fd < 0) {
 		/*
 		 * This can happen with a disk so broken it cannot
@@ -589,6 +589,7 @@ fetch_device_details(char *devnames, char **model, cha
 		*model = strdup("?");
 		*serial = strdup("?");
 		*size = -1;
+		close(fd);
 		return;
 	}
 
@@ -608,6 +609,7 @@ fetch_device_details(char *devnames, char **model, cha
 		*size = mediasize;
 	else
 		*size = -1;
+	close(fd);
 }
 
 static void


More information about the svn-src-head mailing list