Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Oct 2003 16:26:20 +0900
From:      Hidetoshi Shimokawa <simokawa@sat.t.u-tokyo.ac.jp>
To:        audit@freebsd.org
Subject:   kvm.c patch
Message-ID:  <ybsekx3m6zn.wl@ett.sat.t.u-tokyo.ac.jp>

next in thread | raw e-mail | index | archive | help
Hi,

Does anyone object to committing this patch to the tree?
This patch allows kvm_open() to open any raw devices as a crush dump.

This enables us to use /dev/fwmem* as a core file.
(at least for i386 with hw.firewire.fwmem.eui64_hi/lo)
e.g.
        ps -M /dev/fwmem0.0 -N kernel.debug
        dmesg -M /dev/fwmem0.0 -N kernel.debug
        gdb -k -c /dev/fwmem0.0 kernel.debug

My concern is setu(g)ided command which is linked with libkvm.
As far as I checked, there are only commands setgided with kmem, and
the group kmem is allowed to access only /dev/mem and /dev/kmem for
default installation.

--- //depot/vendor/freebsd/src/lib/libkvm/kvm.c	2003/07/31 16:38:08
+++ //depot/user/simokawa/firewire/lib/libkvm/kvm.c	2003/10/08 09:29:09
@@ -192,11 +192,8 @@
 		 */
 		if (strcmp(mf, _PATH_DEVNULL) == 0) {
 			kd->vmfd = open(_PATH_DEVNULL, O_RDONLY);
-		} else if (strcmp(mf, _PATH_MEM) != 0) {
-			_kvm_err(kd, kd->program,
-				 "%s: not physical memory device", mf);
-			goto failed;
-		} else {
+			return (kd);
+		} else if (strcmp(mf, _PATH_MEM) == 0) {
 			if ((kd->vmfd = open(_PATH_KMEM, flag)) < 0) {
 				_kvm_syserr(kd, kd->program, "%s", _PATH_KMEM);
 				goto failed;
@@ -205,24 +202,24 @@
 				_kvm_syserr(kd, kd->program, "%s", _PATH_KMEM);
 				goto failed;
 			}
+			return (kd);
 		}
-	} else {
-		/*
-		 * This is a crash dump.
-		 * Initialize the virtual address translation machinery,
-		 * but first setup the namelist fd.
-		 */
-		if ((kd->nlfd = open(uf, O_RDONLY, 0)) < 0) {
-			_kvm_syserr(kd, kd->program, "%s", uf);
-			goto failed;
-		}
-		if (fcntl(kd->nlfd, F_SETFD, FD_CLOEXEC) < 0) {
-			_kvm_syserr(kd, kd->program, "%s", uf);
-			goto failed;
-		}
-		if (_kvm_initvtop(kd) < 0)
-			goto failed;
+	}
+	/*
+	 * This is a crash dump.
+	 * Initialize the virtual address translation machinery,
+	 * but first setup the namelist fd.
+	 */
+	if ((kd->nlfd = open(uf, O_RDONLY, 0)) < 0) {
+		_kvm_syserr(kd, kd->program, "%s", uf);
+		goto failed;
+	}
+	if (fcntl(kd->nlfd, F_SETFD, FD_CLOEXEC) < 0) {
+		_kvm_syserr(kd, kd->program, "%s", uf);
+		goto failed;
 	}
+	if (_kvm_initvtop(kd) < 0)
+		goto failed;
 	return (kd);
 failed:
 	/*

/\ Hidetoshi Shimokawa
\/  simokawa@sat.t.u-tokyo.ac.jp
PGP public key: http://www.sat.t.u-tokyo.ac.jp/~simokawa/pgp.html


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