socsvn commit: r271062 - in soc2014/op/freebsd-base/sys: kern sys x86/include
op at FreeBSD.org
op at FreeBSD.org
Fri Jul 18 08:48:21 UTC 2014
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 at 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);
More information about the svn-soc-all
mailing list