Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Apr 2018 15:53:15 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r333116 - user/markj/netdump/sys/netinet/netdump
Message-ID:  <201804301553.w3UFrFf4072444@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Mon Apr 30 15:53:15 2018
New Revision: 333116
URL: https://svnweb.freebsd.org/changeset/base/333116

Log:
  Fix some issues with NETDUMPSCONF.
  
  - Null-terminate the interface name.
  - Properly copy in the encryption key.

Modified:
  user/markj/netdump/sys/netinet/netdump/netdump_client.c

Modified: user/markj/netdump/sys/netinet/netdump/netdump_client.c
==============================================================================
--- user/markj/netdump/sys/netinet/netdump/netdump_client.c	Mon Apr 30 15:23:45 2018	(r333115)
+++ user/markj/netdump/sys/netinet/netdump/netdump_client.c	Mon Apr 30 15:53:15 2018	(r333116)
@@ -34,8 +34,6 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#include "opt_netdump.h"
-
 #include <sys/param.h>
 #include <sys/conf.h>
 #include <sys/disk.h>
@@ -1114,8 +1112,10 @@ static int
 netdump_ioctl(struct cdev *dev __unused, u_long cmd, caddr_t addr,
     int flags __unused, struct thread *td)
 {
+	struct diocskerneldump_arg *kda;
 	struct dumperinfo dumper;
 	struct netdump_conf *conf;
+	uint8_t *encryptedkey;
 	int error;
 	u_int u;
 
@@ -1148,7 +1148,11 @@ netdump_ioctl(struct cdev *dev __unused, u_long cmd, c
 		break;
 	case NETDUMPSCONF:
 		conf = (struct netdump_conf *)addr;
-		if (conf->ndc_kda.kda_enable == 0) {
+		encryptedkey = NULL;
+		kda = &conf->ndc_kda;
+
+		conf->ndc_iface[sizeof(conf->ndc_iface) - 1] = '\0';
+		if (kda->kda_enable == 0) {
 			if (nd_enabled) {
 				error = clear_dumper(td);
 				if (error == 0)
@@ -1161,6 +1165,21 @@ netdump_ioctl(struct cdev *dev __unused, u_long cmd, c
 		if (error != 0)
 			break;
 
+		if (kda->kda_encryption != KERNELDUMP_ENC_NONE) {
+			if (kda->kda_encryptedkeysize <= 0 ||
+			    kda->kda_encryptedkeysize >
+			    KERNELDUMP_ENCKEY_MAX_SIZE)
+				return (EINVAL);
+			encryptedkey = malloc(kda->kda_encryptedkeysize, M_TEMP,
+			    M_WAITOK);
+			error = copyin(kda->kda_encryptedkey, encryptedkey,
+			    kda->kda_encryptedkeysize);
+			if (error != 0) {
+				free(encryptedkey, M_TEMP);
+				return (error);
+			}
+		}
+
 		dumper.dumper_start = netdump_start;
 		dumper.dumper_hdr = netdump_write_headers;
 		dumper.dumper = netdump_dumper;
@@ -1169,10 +1188,15 @@ netdump_ioctl(struct cdev *dev __unused, u_long cmd, c
 		dumper.maxiosize = MAXDUMPPGS * PAGE_SIZE;
 		dumper.mediaoffset = 0;
 		dumper.mediasize = 0;
+
 		error = set_dumper(&dumper, conf->ndc_iface, td,
-		    conf->ndc_kda.kda_compression, conf->ndc_kda.kda_encryption,
-		    conf->ndc_kda.kda_key, conf->ndc_kda.kda_encryptedkeysize,
-		    conf->ndc_kda.kda_encryptedkey);
+		    kda->kda_compression, kda->kda_encryption,
+		    kda->kda_key, kda->kda_encryptedkeysize,
+		    encryptedkey);
+		if (encryptedkey != NULL) {
+			explicit_bzero(encryptedkey, kda->kda_encryptedkeysize);
+			free(encryptedkey, M_TEMP);
+		}
 		if (error != 0)
 			nd_enabled = 0;
 		break;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201804301553.w3UFrFf4072444>