From owner-svn-soc-all@FreeBSD.ORG Tue Aug 12 23:22:39 2014 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 940954BE for ; Tue, 12 Aug 2014 23:22:39 +0000 (UTC) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 73F5725A3 for ; Tue, 12 Aug 2014 23:22:39 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7CNMdj0015162 for ; Tue, 12 Aug 2014 23:22:39 GMT (envelope-from op@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.9/8.14.9/Submit) id s7CNMdXF015160 for svn-soc-all@FreeBSD.org; Tue, 12 Aug 2014 23:22:39 GMT (envelope-from op@FreeBSD.org) Date: Tue, 12 Aug 2014 23:22:39 GMT Message-Id: <201408122322.s7CNMdXF015160@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to op@FreeBSD.org using -f From: op@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r272311 - soc2014/op/freebsd-base/sys/kern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Aug 2014 23:22:39 -0000 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 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 @@ -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