Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Sep 2013 19:26:09 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r255677 - in head/sys: amd64/amd64 arm/arm i386/i386 kern sparc64/sparc64
Message-ID:  <201309181926.r8IJQ97A001946@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Wed Sep 18 19:26:08 2013
New Revision: 255677
URL: http://svnweb.freebsd.org/changeset/base/255677

Log:
  Fix panic in ktrcapfail() when no capability rights are passed.
  While here, correct all consumers to pass NULL instead of 0 as we pass
  capability rights as pointers now, not uint64_t.
  
  Reported by:	Daniel Peyrolon
  Tested by:	Daniel Peyrolon
  Approved by:	re (marius)

Modified:
  head/sys/amd64/amd64/sys_machdep.c
  head/sys/arm/arm/sys_machdep.c
  head/sys/i386/i386/sys_machdep.c
  head/sys/kern/kern_ktrace.c
  head/sys/kern/vfs_lookup.c
  head/sys/sparc64/sparc64/sys_machdep.c

Modified: head/sys/amd64/amd64/sys_machdep.c
==============================================================================
--- head/sys/amd64/amd64/sys_machdep.c	Wed Sep 18 18:49:26 2013	(r255676)
+++ head/sys/amd64/amd64/sys_machdep.c	Wed Sep 18 19:26:08 2013	(r255677)
@@ -209,7 +209,7 @@ sysarch(td, uap)
 		default:
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_CAPFAIL))
-				ktrcapfail(CAPFAIL_SYSCALL, 0, 0);
+				ktrcapfail(CAPFAIL_SYSCALL, NULL, NULL);
 #endif
 			return (ECAPMODE);
 		}

Modified: head/sys/arm/arm/sys_machdep.c
==============================================================================
--- head/sys/arm/arm/sys_machdep.c	Wed Sep 18 18:49:26 2013	(r255676)
+++ head/sys/arm/arm/sys_machdep.c	Wed Sep 18 19:26:08 2013	(r255677)
@@ -138,7 +138,7 @@ sysarch(td, uap)
 		default:
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_CAPFAIL))
-				ktrcapfail(CAPFAIL_SYSCALL, 0, 0);
+				ktrcapfail(CAPFAIL_SYSCALL, NULL, NULL);
 #endif
 			return (ECAPMODE);
 		}

Modified: head/sys/i386/i386/sys_machdep.c
==============================================================================
--- head/sys/i386/i386/sys_machdep.c	Wed Sep 18 18:49:26 2013	(r255676)
+++ head/sys/i386/i386/sys_machdep.c	Wed Sep 18 19:26:08 2013	(r255677)
@@ -132,7 +132,7 @@ sysarch(td, uap)
 		default:
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_CAPFAIL))
-				ktrcapfail(CAPFAIL_SYSCALL, 0, 0);
+				ktrcapfail(CAPFAIL_SYSCALL, NULL, NULL);
 #endif
 			return (ECAPMODE);
 		}

Modified: head/sys/kern/kern_ktrace.c
==============================================================================
--- head/sys/kern/kern_ktrace.c	Wed Sep 18 18:49:26 2013	(r255676)
+++ head/sys/kern/kern_ktrace.c	Wed Sep 18 19:26:08 2013	(r255677)
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
 #include "opt_ktrace.h"
 
 #include <sys/param.h>
+#include <sys/capability.h>
 #include <sys/systm.h>
 #include <sys/fcntl.h>
 #include <sys/kernel.h>
@@ -791,8 +792,14 @@ ktrcapfail(type, needed, held)
 		return;
 	kcf = &req->ktr_data.ktr_cap_fail;
 	kcf->cap_type = type;
-	kcf->cap_needed = *needed;
-	kcf->cap_held = *held;
+	if (needed != NULL)
+		kcf->cap_needed = *needed;
+	else
+		cap_rights_init(&kcf->cap_needed);
+	if (held != NULL)
+		kcf->cap_held = *held;
+	else
+		cap_rights_init(&kcf->cap_held);
 	ktr_enqueuerequest(td, req);
 	ktrace_exit(td);
 }

Modified: head/sys/kern/vfs_lookup.c
==============================================================================
--- head/sys/kern/vfs_lookup.c	Wed Sep 18 18:49:26 2013	(r255676)
+++ head/sys/kern/vfs_lookup.c	Wed Sep 18 19:26:08 2013	(r255677)
@@ -178,7 +178,7 @@ namei(struct nameidata *ndp)
 		if (ndp->ni_dirfd == AT_FDCWD) {
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_CAPFAIL))
-				ktrcapfail(CAPFAIL_LOOKUP, 0, 0);
+				ktrcapfail(CAPFAIL_LOOKUP, NULL, NULL);
 #endif
 			error = ECAPMODE;
 		}
@@ -284,7 +284,7 @@ namei(struct nameidata *ndp)
 			if (ndp->ni_strictrelative != 0) {
 #ifdef KTRACE
 				if (KTRPOINT(curthread, KTR_CAPFAIL))
-					ktrcapfail(CAPFAIL_LOOKUP, 0, 0);
+					ktrcapfail(CAPFAIL_LOOKUP, NULL, NULL);
 #endif
 				return (ENOTCAPABLE);
 			}
@@ -640,7 +640,7 @@ dirloop:
 		if (ndp->ni_strictrelative != 0) {
 #ifdef KTRACE
 			if (KTRPOINT(curthread, KTR_CAPFAIL))
-				ktrcapfail(CAPFAIL_LOOKUP, 0, 0);
+				ktrcapfail(CAPFAIL_LOOKUP, NULL, NULL);
 #endif
 			error = ENOTCAPABLE;
 			goto bad;

Modified: head/sys/sparc64/sparc64/sys_machdep.c
==============================================================================
--- head/sys/sparc64/sparc64/sys_machdep.c	Wed Sep 18 18:49:26 2013	(r255676)
+++ head/sys/sparc64/sparc64/sys_machdep.c	Wed Sep 18 19:26:08 2013	(r255677)
@@ -71,7 +71,7 @@ sysarch(struct thread *td, struct sysarc
 		default:
 #ifdef KTRACE
 			if (KTRPOINT(td, KTR_CAPFAIL))
-				ktrcapfail(CAPFAIL_SYSCALL, 0, 0);
+				ktrcapfail(CAPFAIL_SYSCALL, NULL, NULL);
 #endif
 			return (ECAPMODE);
 		}



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