Date: Fri, 18 Jul 2014 08:48:19 GMT From: op@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r271062 - in soc2014/op/freebsd-base/sys: kern sys x86/include Message-ID: <201407180848.s6I8mJBM097815@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: op Date: Fri Jul 18 08:48:19 2014 New Revision: 271062 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271062 Log: KSP: implement lf_selfpatch_patch_needed(struct lf_selfpatch *p) Signed-off-by: Oliver Pinter <oliver.pntr@gmail.com> git: https://github.com/opntr/opBSD/tree/op/gsoc2014/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/include/_selfpatch.h Modified: soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c ============================================================================== --- soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c Fri Jul 18 08:47:59 2014 (r271061) +++ soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c Fri Jul 18 08:48:19 2014 (r271062) @@ -37,14 +37,51 @@ #include <sys/linker.h> #include <sys/linker_set.h> - #include <sys/selfpatch.h> +#include <machine/md_var.h> +#include <machine/specialreg.h> + bool lf_selfpatch_patch_needed(struct lf_selfpatch *p) { - printf("NOT IMPLEMENTED: %s\n", __func__); + if (p == NULL) + return (false); + + switch (p->feature_selector) { + case KSP_CPU_FEATURE : + if ((cpu_feature & p->feature) != 0) + return (true); + break; + case KSP_CPU_FEATURE2 : + if ((cpu_feature2 & p->feature) != 0) + return (true); + break; + case KSP_AMD_FEATURE : + if ((amd_feature & p->feature) != 0) + return (true); + break; + case KSP_AMD_FEATURE2 : + if ((amd_feature2 & p->feature) != 0) + return (true); + break; + case KSP_VIA_FEATURE_RNG : + if ((via_feature_rng & p->feature) != 0) + return (true); + break; + case KSP_VIA_FEATURE_XCRYPT : + if ((via_feature_xcrypt & p->feature) != 0) + return (true); + break; + case KSP_CPU_STDEXT_FEATURE : + if ((cpu_stdext_feature & p->feature) != 0) + return (true); + break; + + default: + return (false); + } return (false); } Modified: soc2014/op/freebsd-base/sys/sys/selfpatch.h ============================================================================== --- soc2014/op/freebsd-base/sys/sys/selfpatch.h Fri Jul 18 08:47:59 2014 (r271061) +++ soc2014/op/freebsd-base/sys/sys/selfpatch.h Fri Jul 18 08:48:19 2014 (r271062) @@ -31,6 +31,8 @@ #include <machine/_selfpatch.h> +struct linker_file_t; + typedef struct lf_selfpatch { void *patchable; void *patch; Modified: soc2014/op/freebsd-base/sys/x86/include/_selfpatch.h ============================================================================== --- soc2014/op/freebsd-base/sys/x86/include/_selfpatch.h Fri Jul 18 08:47:59 2014 (r271061) +++ soc2014/op/freebsd-base/sys/x86/include/_selfpatch.h Fri Jul 18 08:48:19 2014 (r271062) @@ -37,6 +37,8 @@ #define KSP_VIA_FEATURE_XCRYPT 6 #define KSP_CPU_STDEXT_FEATURE 7 +struct lf_selfpatch; + extern char *md_selfpatch_nop_table[]; bool lf_selfpatch_patch_needed(struct lf_selfpatch *p);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407180848.s6I8mJBM097815>