From owner-svn-src-user@freebsd.org Mon Apr 30 15:53:16 2018 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E0162FAEE29 for ; Mon, 30 Apr 2018 15:53:15 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9347481252; Mon, 30 Apr 2018 15:53:15 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8E51115515; Mon, 30 Apr 2018 15:53:15 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UFrFtF072445; Mon, 30 Apr 2018 15:53:15 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UFrFf4072444; Mon, 30 Apr 2018 15:53:15 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201804301553.w3UFrFf4072444@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Mon, 30 Apr 2018 15:53:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r333116 - user/markj/netdump/sys/netinet/netdump X-SVN-Group: user X-SVN-Commit-Author: markj X-SVN-Commit-Paths: user/markj/netdump/sys/netinet/netdump X-SVN-Commit-Revision: 333116 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Apr 2018 15:53:16 -0000 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 __FBSDID("$FreeBSD$"); -#include "opt_netdump.h" - #include #include #include @@ -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;