rpms/kernel/devel kernel.spec, 1.148, 1.149 linux-2.6-execshield.patch, 1.71, 1.72
Chuck Ebbert (cebbert)
fedora-extras-commits at redhat.com
Thu Sep 6 17:35:00 UTC 2007
Author: cebbert
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24459
Modified Files:
kernel.spec linux-2.6-execshield.patch
Log Message:
* Thu Sep 06 2007 Chuck Ebbert <cebbert at redhat.com>
- exec-shield: enable interrupts in do_iret_error()
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -r1.148 -r1.149
--- kernel.spec 5 Sep 2007 19:43:23 -0000 1.148
+++ kernel.spec 6 Sep 2007 17:34:27 -0000 1.149
@@ -1782,6 +1782,9 @@
%changelog
+* Thu Sep 06 2007 Chuck Ebbert <cebbert at redhat.com>
+- exec-shield: enable interrupts in do_iret_error()
+
* Wed Sep 05 2007 Chuck Ebbert <cebbert at redhat.com>
- 2.6.23-rc5-git1
linux-2.6-execshield.patch:
Index: linux-2.6-execshield.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-execshield.patch,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -r1.71 -r1.72
--- linux-2.6-execshield.patch 3 Aug 2007 16:45:32 -0000 1.71
+++ linux-2.6-execshield.patch 6 Sep 2007 17:34:27 -0000 1.72
@@ -367,7 +367,7 @@
* Walk the list again, actually closing and freeing it,
--- linux-2.6.22.noarch/arch/i386/kernel/traps.c~ 2007-07-20 13:50:07.000000000 -0400
+++ linux-2.6.22.noarch/arch/i386/kernel/traps.c 2007-07-20 13:52:09.000000000 -0400
-@@ -573,7 +573,84 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
+@@ -573,7 +573,88 @@ DO_ERROR(10, SIGSEGV, "invalid TSS", inv
DO_ERROR(11, SIGBUS, "segment not present", segment_not_present)
DO_ERROR(12, SIGBUS, "stack segment", stack_segment)
DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0, 0)
@@ -429,14 +429,18 @@
+ * The fixup code for errors in iret jumps to here (iret_exc). It loses
+ * the original trap number and error code. The bogus trap 32 and error
+ * code 0 are what the vanilla kernel delivers via:
-+ * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
++ * DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0, 1)
++ *
++ * NOTE: Because of the final "1" in the macro we need to enable interrupts.
+ *
+ * In case of a general protection fault in the iret instruction, we
+ * need to check for a lazy CS update for exec-shield.
+ */
+fastcall void do_iret_error(struct pt_regs *regs, long error_code)
+{
-+ int ok = check_lazy_exec_limit(get_cpu(), regs, error_code);
++ int ok;
++ local_irq_enable();
++ ok = check_lazy_exec_limit(get_cpu(), regs, error_code);
+ put_cpu();
+ if (!ok && notify_die(DIE_TRAP, "iret exception", regs,
+ error_code, 32, SIGSEGV) != NOTIFY_STOP) {
More information about the fedora-extras-commits
mailing list