socsvn commit: r272130 - in soc2014/op/freebsd-base/sys: kern sys
op at FreeBSD.org
op at FreeBSD.org
Sat Aug 9 15:33:03 UTC 2014
Author: op
Date: Sat Aug 9 15:33:02 2014
New Revision: 272130
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=272130
Log:
KSP: try to fix panic on kldunload when the module loaded at run-time
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_linker.c
soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c
soc2014/op/freebsd-base/sys/sys/selfpatch.h
Modified: soc2014/op/freebsd-base/sys/kern/kern_linker.c
==============================================================================
--- soc2014/op/freebsd-base/sys/kern/kern_linker.c Sat Aug 9 15:32:48 2014 (r272129)
+++ soc2014/op/freebsd-base/sys/kern/kern_linker.c Sat Aug 9 15:33:02 2014 (r272130)
@@ -421,7 +421,7 @@
return (error);
}
modules = !TAILQ_EMPTY(&lf->modules);
- lf_selfpatch(lf, 0);
+ lf_selfpatch(lf, KSP_MODULE);
linker_file_register_sysctls(lf);
linker_file_sysinit(lf);
lf->flags |= LINKER_FILE_LINKED;
@@ -1611,7 +1611,7 @@
}
linker_file_register_modules(lf);
/* XXXOP */
- lf_selfpatch(lf, KSP_PRELOAD);
+ lf_selfpatch(lf, KSP_MODULE);
if (linker_file_lookup_set(lf, "sysinit_set", &si_start,
&si_stop, NULL) == 0)
sysinit_add(si_start, si_stop);
Modified: soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c
==============================================================================
--- soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c Sat Aug 9 15:32:48 2014 (r272129)
+++ soc2014/op/freebsd-base/sys/kern/kern_selfpatch.c Sat Aug 9 15:33:02 2014 (r272130)
@@ -116,12 +116,12 @@
}
void
-lf_selfpatch(linker_file_t lf, int preload)
+lf_selfpatch(linker_file_t lf, int mod)
{
struct lf_selfpatch *patch, *start, *stop;
int count, ret;
- DBG("lf: %p %s\n", lf, preload ? "(preloaded)" : "");
+ DBG("lf: %p %s\n", lf, mod ? "(module)" : "(kernel)");
if (lf != NULL) {
DBG("module: %s\n", lf->filename);
@@ -143,8 +143,8 @@
for (patch = start; patch != stop; patch++) {
DBG("apply: %p\n", patch);
- if (preload == KSP_PRELOAD)
- lf_selfpatch_apply_preload(lf, patch);
+ if (mod == KSP_MODULE)
+ lf_selfpatch_apply_module(lf, patch);
else
lf_selfpatch_apply(lf, patch);
}
@@ -215,7 +215,7 @@
}
void
-lf_selfpatch_apply_preload(linker_file_t lf, struct lf_selfpatch *p)
+lf_selfpatch_apply_module(linker_file_t lf, struct lf_selfpatch *p)
{
DBG("patchable: %p\n", p->patchable);
Modified: soc2014/op/freebsd-base/sys/sys/selfpatch.h
==============================================================================
--- soc2014/op/freebsd-base/sys/sys/selfpatch.h Sat Aug 9 15:32:48 2014 (r272129)
+++ soc2014/op/freebsd-base/sys/sys/selfpatch.h Sat Aug 9 15:33:02 2014 (r272130)
@@ -36,7 +36,7 @@
#include <machine/selfpatch-machdep.h>
-#define KSP_PRELOAD 1
+#define KSP_MODULE 1
struct linker_file_t;
@@ -52,8 +52,8 @@
extern char *selfpatch_nop_table[];
-void lf_selfpatch(linker_file_t lf, int preload);
+void lf_selfpatch(linker_file_t lf, int mod);
void lf_selfpatch_apply(linker_file_t lf, struct lf_selfpatch *patch);
-void lf_selfpatch_apply_preload(linker_file_t lf, struct lf_selfpatch *patch);
+void lf_selfpatch_apply_module(linker_file_t lf, struct lf_selfpatch *patch);
#endif /* __SELFPATH_H__ */
More information about the svn-soc-all
mailing list