socsvn commit: r272311 - soc2014/op/freebsd-base/sys/kern

op at FreeBSD.org op at FreeBSD.org
Tue Aug 12 23:22:39 UTC 2014


Author: op
Date: Tue Aug 12 23:22:38 2014
New Revision: 272311
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272311

Log:
  KSP: added KSP_WxorX_KERNEL guard, and added more code to KSP_WxorX_KERNEL case
  
  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

Modified: soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c
==============================================================================
--- soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c	Tue Aug 12 23:03:11 2014	(r272310)
+++ soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c	Tue Aug 12 23:22:38 2014	(r272311)
@@ -26,7 +26,7 @@
  * $FreeBSD$
  */
 
-//#include "opt_selfpatch.h"
+#include "opt_selfpatch.h"
 
 #include <sys/cdefs.h>
 
@@ -54,6 +54,10 @@
 		printf(__VA_ARGS__);			\
 	}
 
+#ifdef KSP_WxorX_KERNEL
+#undef KSP_WxorX_KERNEL
+#endif /* KSP_WxorX_KERNEL */
+
 extern struct lf_selfpatch __start_set_selfpatch_set[];
 extern struct lf_selfpatch __stop_set_selfpatch_set[];
 
@@ -205,7 +209,14 @@
 	 * dummy function, currently unused becasue the kernel
 	 * protection is RWX
 	 */
-#if 0
+#ifdef KSP_WxorX_KERNEL
+	vm_offset_t eva, sva;
+
+	eva = (vm_offset_t)(p->patchable);
+	sva = (vm_offset_t)(p->patchable + p->patchable_size);
+
+	DBG("kernel: %p - %p RX -> RWX"
+	    (void *)sva, (void *)eva);
 	pmap_protect(kernel_pmap, sva, eva,
 	    VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
 #endif
@@ -220,7 +231,14 @@
 	 *
 	 * currently flushes the cache after modification
 	 */
-#if 0
+#ifdef KSP_WxorX_KERNEL
+	vm_offset_t eva, sva;
+
+	eva = (vm_offset_t)(p->patchable);
+	sva = (vm_offset_t)(p->patchable + p->patchable_size);
+	DBG("kernel: %p - %p RWX -> RX",
+	    (void *)sva, (void *)eva);
+
 	pmap_protect(kernel_pmap, sva, eva,
 	    VM_PROT_READ | VM_PROT_EXECUTE);
 #endif
@@ -228,6 +246,8 @@
 	/* Flushes caches and TLBs. */
 	wbinvd();
 	invltlb();
+
+	DBG("caches flushed.");
 }
 
 static void
@@ -237,7 +257,14 @@
 	 * dummy function, currently unused becasue the kernel
 	 * protection is RWX
 	 */
-#if 0
+#ifdef KSP_WxorX_KERNEL
+	vm_offset_t eva, sva;
+
+	eva = (vm_offset_t)(p->patchable);
+	sva = (vm_offset_t)(p->patchable + p->patchable_size);
+	DBG("module: %p - %p RX -> RWX",
+	    (void *)sva, (void *)eva);
+
 	pmap_protect(module_pmap, sva, eva,
 	    VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
 #endif
@@ -252,7 +279,14 @@
 	 *
 	 * currently flushes the cache after modification
 	 */
-#if 0
+#ifdef KSP_WxorX_KERNEL
+	vm_offset_t eva, sva;
+
+	eva = (vm_offset_t)(p->patchable);
+	sva = (vm_offset_t)(p->patchable + p->patchable_size);
+	DBG("module: %p - %p RWX -> RX",
+	    (void *)sva, (void *)eva);
+
 	pmap_protect(module_pmap, sva, eva,
 	    VM_PROT_READ | VM_PROT_EXECUTE);
 #endif


More information about the svn-soc-all mailing list