diff options
author | kib <kib@FreeBSD.org> | 2010-05-12 10:29:35 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-05-12 10:29:35 +0000 |
commit | 7c190c1c89d45ca83db4120a8a5fe107a8a52050 (patch) | |
tree | eecf228988f4249cfce539021a39a53ebe7b9b01 /usr.bin | |
parent | 7b04e359b060fb4d6869ca817495df9327ef6090 (diff) | |
download | FreeBSD-src-7c190c1c89d45ca83db4120a8a5fe107a8a52050.zip FreeBSD-src-7c190c1c89d45ca83db4120a8a5fe107a8a52050.tar.gz |
Route all returns from the interrupts and faults through the doreti_iret
labeled iretq instruction.
Suppose that multithreaded process executes two threads, currently
scheduled on different processors. Let assume that thread A executes
using %cs or %ss pointing into the descriptor from LDT. If IPI comes
which handler does not return by jump to doreti, and meantime thread B
invalidates descriptor pointed to by %cs or %ss, then iretq from IPI
handler could fault.
Routing the return by doreti_iret allows kernel to catch the situation
and recover from it by sending signal to the usermode.
Tested by: pho
MFC after: 1 week
Diffstat (limited to 'usr.bin')
0 files changed, 0 insertions, 0 deletions