2006-11-08 11:47:44 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// Alex's Big Ol' List of FIXMEs, bugs and regressions
|
|
|
|
// If you see something here, Alex *KNOWS ABOUT IT*.
|
|
|
|
// Do NOT bug him about it.
|
|
|
|
// Do NOT ask if he knows about it.
|
|
|
|
// Do NOT complain about it.
|
|
|
|
// Do NOT ask when it will be fixed.
|
|
|
|
// Failure to respect this will *ACHIEVE NOTHING*.
|
|
|
|
//
|
2007-01-17 20:44:37 +00:00
|
|
|
// Ke2:
|
|
|
|
// - Dispatcher Rewrite (DPCs-Timers-Waits).
|
|
|
|
//
|
2006-11-22 07:45:30 +00:00
|
|
|
// Hal:
|
- Fix critical bugs in exception handling: Unwinding was completely broken, using the wrong SEH protector to detect collided unwinding. The correct protector itself also had a broken check.
- Fix architectural bug in the entire TrapFrame<->Context conversion system and Ring Privilege Transitions (Inter-ring and intra-ring) which was lacking proper sanitation and validation of segments, flags and debug registers. Among other things, IOPL is now respected, CS is not KGDT_R0_CODE | RPL_MASK anymore, and the GPF code is now properly being called. This completely fixes exception handling being totally broken and crashing firefox installer, mirc, and other applications.
- Rewrite the page fault handler base code in assembly instead of relying on a broken C routine. Detect VDM, V8086, detecting expected/normal fault in ExpInterlockedPopEntrySList and faults in the system handler code. Rewrite MmAccessFault to be the main function that calls out to other sub-fault functions, and use the same prototype as NT.
- Fix the KGDT boot table to have proper granularity and big flags, and extend it to 256 entries.
- Create proper thread context in RtlInitializeContext and cleanup Rtl Thread routines.
- Remove all int3 and breakpoints from trap handlers, and replace them with a much better "UNHANDLED_PATH" macro which freezes the system, beeps, and displays a message with the line of code that's unhandled. This is to clearly tell the user that something is unhandled, instead of nesting infinite exceptions due to the int3.
- Fix a bug in INT_PROLOG.
- Sanitize EFLAGS and Code Segments in KeContextToTrapFrame and KeTrapFrameToContext.
- Implement KiUpdateDr7 and KiRecordDr7 as well as DR_MASK and other DR-validation macros and functions to protect against DR-vulnerabilites as well as to properly account for each active hardware breakpoint in a per-thread fashion by using the dispatcher header.
- Allow CR0_EM when running in a VDM.
- Fix FPU/NPX Register handling in KeContextToTrapFrame and KeTrapFrameToContext, and also speed it up by manual copying instead of a memory move.
- Properly give IOPL 3 to user-mode threads if they requested it.
- Detect GPF during GPF.
- Detect pagefault with a trap-frame spread over two or more pages and nested.
- Properly sanitize and set correct trap frame in KiInitailizeUserApc.
- Return STATUS_ACCESS_VIOLATION during page faults instead of STATUS_UNSUCESSFUL.
- Fix assert in VdmSwapContext, as well as Code Selector check which was broken.
- Fix delayed object deletion (ObDeferDeleteObject) and the Ob Repear Routine and list.
- Update Kernel Fun.
- BUGBUG: Temporaily hack VMWare to detection to always detect VMWare.
svn path=/trunk/; revision=25238
2006-12-29 18:49:00 +00:00
|
|
|
// - Use APC and DPC Interrupt Dispatchers.
|
2006-11-22 07:45:30 +00:00
|
|
|
// - CMOS Initialization and CMOS Spinlock.
|
2006-11-08 11:47:44 +00:00
|
|
|
//
|
2007-01-15 07:33:42 +00:00
|
|
|
// Fstub:
|
|
|
|
// - Implement IoAssignDriveLetters using mount manager support.
|
|
|
|
//
|
2006-11-22 07:45:30 +00:00
|
|
|
// Kd:
|
|
|
|
// - Implement KD Kernel Debugging and WinDBG support.
|
|
|
|
//
|
2006-11-08 11:47:44 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
- Fix critical bugs in exception handling: Unwinding was completely broken, using the wrong SEH protector to detect collided unwinding. The correct protector itself also had a broken check.
- Fix architectural bug in the entire TrapFrame<->Context conversion system and Ring Privilege Transitions (Inter-ring and intra-ring) which was lacking proper sanitation and validation of segments, flags and debug registers. Among other things, IOPL is now respected, CS is not KGDT_R0_CODE | RPL_MASK anymore, and the GPF code is now properly being called. This completely fixes exception handling being totally broken and crashing firefox installer, mirc, and other applications.
- Rewrite the page fault handler base code in assembly instead of relying on a broken C routine. Detect VDM, V8086, detecting expected/normal fault in ExpInterlockedPopEntrySList and faults in the system handler code. Rewrite MmAccessFault to be the main function that calls out to other sub-fault functions, and use the same prototype as NT.
- Fix the KGDT boot table to have proper granularity and big flags, and extend it to 256 entries.
- Create proper thread context in RtlInitializeContext and cleanup Rtl Thread routines.
- Remove all int3 and breakpoints from trap handlers, and replace them with a much better "UNHANDLED_PATH" macro which freezes the system, beeps, and displays a message with the line of code that's unhandled. This is to clearly tell the user that something is unhandled, instead of nesting infinite exceptions due to the int3.
- Fix a bug in INT_PROLOG.
- Sanitize EFLAGS and Code Segments in KeContextToTrapFrame and KeTrapFrameToContext.
- Implement KiUpdateDr7 and KiRecordDr7 as well as DR_MASK and other DR-validation macros and functions to protect against DR-vulnerabilites as well as to properly account for each active hardware breakpoint in a per-thread fashion by using the dispatcher header.
- Allow CR0_EM when running in a VDM.
- Fix FPU/NPX Register handling in KeContextToTrapFrame and KeTrapFrameToContext, and also speed it up by manual copying instead of a memory move.
- Properly give IOPL 3 to user-mode threads if they requested it.
- Detect GPF during GPF.
- Detect pagefault with a trap-frame spread over two or more pages and nested.
- Properly sanitize and set correct trap frame in KiInitailizeUserApc.
- Return STATUS_ACCESS_VIOLATION during page faults instead of STATUS_UNSUCESSFUL.
- Fix assert in VdmSwapContext, as well as Code Selector check which was broken.
- Fix delayed object deletion (ObDeferDeleteObject) and the Ob Repear Routine and list.
- Update Kernel Fun.
- BUGBUG: Temporaily hack VMWare to detection to always detect VMWare.
svn path=/trunk/; revision=25238
2006-12-29 18:49:00 +00:00
|
|
|
// REACTOS GUIDANCE PLAN
|
|
|
|
// ________________________________________________________________________________________________________
|
|
|
|
// / \
|
|
|
|
// | OB, PS, LPC, DBGK, IO => Almost entirely fixed interaction with Ke/Ex. | |
|
|
|
|
// | SE => Not looked at. Interaction with Ps/Io is minimal and currently hacked away. Preserve. |J|
|
|
|
|
// | EX => Needs re-visiting (in trunk). Do callbacks/push locks for interaction with Ps. |A|
|
|
|
|
// | KD/KDBG => Laptop has special version of ROS without these components. Commit in branch. |N|
|
|
|
|
// | INIT => Boot sequence still needs work in terms of interaction with Ke and CPU features. | |
|
|
|
|
// | || || || || || || || || || || || || |F|
|
|
|
|
// | \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ |E|
|
|
|
|
// | HAL => Needs APC/DPC/IRQL implementation fixed ASAP in terms of interaction with Ke. |B|
|
|
|
|
// | FSTUB => Needs IoAssignDriveLetters fixed ASAP but not critical to Ke/Ex. Interacts with Io. | |
|
|
|
|
// | || || || || || || || || || || || || |M|
|
|
|
|
// | \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ |A|
|
|
|
|
// | CM => TOTAL REWRITE. |R|
|
|
|
|
// | || || || || || || || || || || || || | |
|
|
|
|
// | || || || || || || || || || || || || |A|
|
|
|
|
// | \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ |P|
|
|
|
|
// | KE => Timer Rewrite + Thread Scheduler Rewrite. |R|
|
|
|
|
// | || || || || || || || || || || || || |I|
|
|
|
|
// | || || || || || || || || || || || || |L|
|
|
|
|
// | || || || || || || || || || || || || | |
|
|
|
|
// | \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ |M|
|
|
|
|
// | MM => TOTAL REWRITE. |A|
|
|
|
|
// | |Y|
|
|
|
|
// \________________________________________________________________________________________________________/
|
|
|
|
//
|