Introduce TIF_IRET and use it to disable sysexit
PATCH 1/1 Introduce TIF_IRET and use it to disable sysexit
This patch introduces a new flag called TIF_IRET and uses it in place of TIF_SIGPENDING when that flag is used to force return via iret.
This avoids the overhead of calling do_signal and makes the code easier to understand.
arch/i386/kernel/ioport.c +1 -1
@@ -124,6 +124,6 @@ asmlinkage int sys_iopl(unsigned long un } regs->eflags = (regs->eflags &0xffffcfff ) | (level <<12 );/* Make sure we return the long way (not sysenter) */ -set_thread_flag (TIF_SIGPENDING ); +set_thread_flag (TIF_IRET );return 0 ; }
arch/i386/kernel/process.c +1 -1
@@ -561,7 +561,7 @@ asmlinkage int sys_execve(struct pt_regsif (error ==0 ) { current->ptrace &= ~PT_DTRACE ;/* Make sure we don't return using sysenter.. */ -set_thread_flag (TIF_SIGPENDING ); +set_thread_flag (TIF_IRET ); }putname (filename); out:
arch/i386/kernel/signal.c +2 -0
@@ -617,4 +619,6 @@ void do_notify_resume(struct pt_regs *re/* deal with pending signal delivery */ if (thread_info_flags & _TIF_SIGPENDING)do_signal (regs,oldset); + +clear_thread_flag (TIF_IRET ); }
include/asm-i386/thread_info.h +2 -0
@@ -110,6 +110,7 @@ static inline struct thread_info *curren#define TIF_SIGPENDING 2/* signal pending */ #define TIF_NEED_RESCHED 3/* rescheduling necessary */ #define TIF_SINGLESTEP 4/* restore singlestep on return to user mode */ +#define TIF_IRET 5/* return with iret */ #define TIF_USEDFPU 16/* FPU was used by this task this quantum (SMP) */ #define TIF_POLLING_NRFLAG 17/* true if poll_idle() is polling TIF_NEED_RESCHED */
@@ -118,6 +119,7 @@ static inline struct thread_info *curren#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)#define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) +#define _TIF_IRET (1<<TIF_IRET)#define _TIF_USEDFPU (1<<TIF_USEDFPU)#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
Quoted 3 lines · Luca Barbieri
This patch introduces a new flag called
TIF_IRETand uses it in place ofTIF_SIGPENDINGwhen that flag is used to force return via iret.
Thanks. Both (this and the %ebp fix) patches applied, looks fine.
Linus