socsvn commit: r272132 - in soc2014/op/freebsd-base/sys: kern sys x86/x86
op at FreeBSD.org
op at FreeBSD.org
Sat Aug 9 15:33:23 UTC 2014
Author: op
Date: Sat Aug 9 15:33:22 2014
New Revision: 272132
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272132
Log:
KSP: separate out MI and MD part of KSP code
Signed-off-by: Oliver Pinter <oliver.pntr at gmail.com>
git: https://github.com/opntr/opBSD/tree/op/gsoc2014/smap+kpatch
Modified:
soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c
soc2014/op/freebsd-base/sys/sys/selfpatch.h
soc2014/op/freebsd-base/sys/x86/x86/selfpatch_machdep.c
Modified: soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c
==============================================================================
--- soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c Sat Aug 9 15:33:11 2014 (r272131)
+++ soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c Sat Aug 9 15:33:22 2014 (r272132)
@@ -66,52 +66,33 @@
bool
lf_selfpatch_patch_needed(struct lf_selfpatch *p)
{
+ struct ksp_selector_entry *e, *matched;
+
if (p == NULL) {
DBG("false\n");
return (false);
}
- switch (p->feature_selector) {
- case KSP_CPUID :
- if ((cpu_feature & p->feature) != 0)
- return (true);
- break;
- case KSP_CPUID2 :
- if ((cpu_feature2 & p->feature) != 0)
- return (true);
- break;
- case KSP_AMDID :
- if ((amd_feature & p->feature) != 0)
- return (true);
- break;
- case KSP_AMDID2 :
- if ((amd_feature2 & p->feature) != 0)
- return (true);
- break;
- case KSP_CPUID_STDEXT :
- if ((cpu_stdext_feature & p->feature) != 0)
- return (true);
- break;
- case KSP_VIA_CPUID :
- if ((via_feature_rng & p->feature) != 0)
- return (true);
- break;
- case KSP_VIA_CRYPT_CWLO :
- if ((via_feature_xcrypt & p->feature) != 0)
- return (true);
- break;
- case KSP_CPUID_EXTSTATE :
- if ((cpu_extstate & p->feature) != 0)
+ matched = NULL;
+ for (e = ksp_selector_table;
+ (e->feature_selector != KSP_NULL) && (e->featurep != NULL);
+ e++) {
+ if (e->feature_selector == p->feature_selector) {
+ matched = e;
+ break;
+ }
+ }
+
+ if (matched != NULL) {
+ if ( (*(matched->featurep) & p->feature) != 0)
return (true);
- break;
- case KSP_SELFTEST:
+
+ }
+
+ if (p->feature_selector == KSP_SELFTEST)
if ((p->feature & KSP_FEATURE_SELFTEST) != 0)
return (true);
- break;
- default:
- return (false);
- }
return (false);
}
@@ -277,8 +258,8 @@
" .quad 3b ; "
" .int 2b-1b ; "
" .int 4b-3b ; "
- " .int 0 ; "
- " .int 1 ; "
+ " .int " __XSTRING(KSP_SELFTEST) " ; "
+ " .int " __XSTRING(KSP_FEATURE_SELFTEST) " ; "
" .quad 0 ; "
" .popsection ; "
);
Modified: soc2014/op/freebsd-base/sys/sys/selfpatch.h
==============================================================================
--- soc2014/op/freebsd-base/sys/sys/selfpatch.h Sat Aug 9 15:33:11 2014 (r272131)
+++ soc2014/op/freebsd-base/sys/sys/selfpatch.h Sat Aug 9 15:33:22 2014 (r272132)
@@ -31,7 +31,17 @@
#include <machine/selfpatch-asmacros.h>
-#define KSP_SELFTEST 0
+#define KSP_NULL 0
+#define KSP_SELFTEST -1
+
+struct ksp_selector_entry {
+ const int feature_selector;
+ const int *featurep;
+};
+#define KSP_SELECTOR_END {KSP_NULL, NULL}
+
+extern struct ksp_selector_entry ksp_selector_table[];
+
#define KSP_FEATURE_SELFTEST 1
#include <machine/selfpatch-machdep.h>
Modified: soc2014/op/freebsd-base/sys/x86/x86/selfpatch_machdep.c
==============================================================================
--- soc2014/op/freebsd-base/sys/x86/x86/selfpatch_machdep.c Sat Aug 9 15:33:11 2014 (r272131)
+++ soc2014/op/freebsd-base/sys/x86/x86/selfpatch_machdep.c Sat Aug 9 15:33:22 2014 (r272132)
@@ -32,9 +32,24 @@
#include <sys/systm.h>
#include <sys/types.h>
#include <sys/kernel.h>
-
#include <sys/linker.h>
#include <sys/linker_set.h>
-
#include <sys/selfpatch.h>
+#include <machine/md_var.h>
+#include <machine/specialreg.h>
+
+struct ksp_selector_entry ksp_selector_table[] = {
+ /* feature_selector feature pointer */
+ {KSP_CPUID, &cpu_feature},
+ {KSP_CPUID2, &cpu_feature2},
+ {KSP_AMDID, &amd_feature},
+ {KSP_AMDID2, &amd_feature2},
+ {KSP_CPUID_STDEXT, &cpu_stdext_feature},
+ {KSP_VIA_CPUID, &via_feature_rng},
+ {KSP_VIA_CRYPT_CWLO, &via_feature_xcrypt},
+ {KSP_CPUID_EXTSTATE, &cpu_extstate},
+
+ KSP_SELECTOR_END
+};
+
More information about the svn-soc-all
mailing list