summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2013-09-18 19:26:08 +0000
committerpjd <pjd@FreeBSD.org>2013-09-18 19:26:08 +0000
commit667d7255be08a70cf5f13ef687602bb02959d087 (patch)
treeed338077b5ccdb1b3587409afaec8ad90e20dbf6
parent9e8e4eba855f8c294ccd16a6001e02672ba4955b (diff)
downloadFreeBSD-src-667d7255be08a70cf5f13ef687602bb02959d087.zip
FreeBSD-src-667d7255be08a70cf5f13ef687602bb02959d087.tar.gz
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)
-rw-r--r--sys/amd64/amd64/sys_machdep.c2
-rw-r--r--sys/arm/arm/sys_machdep.c2
-rw-r--r--sys/i386/i386/sys_machdep.c2
-rw-r--r--sys/kern/kern_ktrace.c11
-rw-r--r--sys/kern/vfs_lookup.c6
-rw-r--r--sys/sparc64/sparc64/sys_machdep.c2
6 files changed, 16 insertions, 9 deletions
diff --git a/sys/amd64/amd64/sys_machdep.c b/sys/amd64/amd64/sys_machdep.c
index 5be8af5..81ac0e3 100644
--- a/sys/amd64/amd64/sys_machdep.c
+++ b/sys/amd64/amd64/sys_machdep.c
@@ -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);
}
diff --git a/sys/arm/arm/sys_machdep.c b/sys/arm/arm/sys_machdep.c
index 7676a96..7d7f0f5 100644
--- a/sys/arm/arm/sys_machdep.c
+++ b/sys/arm/arm/sys_machdep.c
@@ -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);
}
diff --git a/sys/i386/i386/sys_machdep.c b/sys/i386/i386/sys_machdep.c
index adf6ac4..746f846 100644
--- a/sys/i386/i386/sys_machdep.c
+++ b/sys/i386/i386/sys_machdep.c
@@ -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);
}
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index 3b34fb0..d4b722a 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -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);
}
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index d4d0166..0be0463 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -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;
diff --git a/sys/sparc64/sparc64/sys_machdep.c b/sys/sparc64/sparc64/sys_machdep.c
index c8e8694..9c9163f 100644
--- a/sys/sparc64/sparc64/sys_machdep.c
+++ b/sys/sparc64/sparc64/sys_machdep.c
@@ -71,7 +71,7 @@ sysarch(struct thread *td, struct sysarch_args *uap)
default:
#ifdef KTRACE
if (KTRPOINT(td, KTR_CAPFAIL))
- ktrcapfail(CAPFAIL_SYSCALL, 0, 0);
+ ktrcapfail(CAPFAIL_SYSCALL, NULL, NULL);
#endif
return (ECAPMODE);
}
OpenPOWER on IntegriCloud