Date: Sat, 9 Aug 2014 15:33:22 GMT From: op@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r272132 - in soc2014/op/freebsd-base/sys: kern sys x86/x86 Message-ID: <201408091533.s79FXMaC080936@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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@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 +}; +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408091533.s79FXMaC080936>