| 82 | | Imagine you have a driver which although normally works well, has a bug |
|---|
| 83 | | (perhaps due to a buffer overflow) which when given malformed data will let |
|---|
| 84 | | the user write 1 byte anywhere in memory. In a regular (linux or windows) |
|---|
| 85 | | kernel, a malicious user could use this to clobber important kernel data |
|---|
| 86 | | structures (such as the IDT) and crash the system, or even worse, use it to |
|---|
| 87 | | gain more privilege than they should have and read or corrupt sensitive data. |
|---|
| 88 | | |
|---|
| 89 | | In the Ring Cycle kernel, all the above data structures live in the ring 0 |
|---|
| 90 | | portion of the address space and cannot be touched by the driver. When the |
|---|
| 91 | | user tries to clobber these structures, the processor will issue a general |
|---|
| 92 | | protection fault and the user is stopped in his tracks. |
|---|
| 93 | | |
|---|
| | 81 | For more details, please see the following: |
|---|
| | 82 | * [wiki:IOModel Asynchronous I/O model] |
|---|
| | 83 | * [wiki:ProtectionModel Protection model] |
|---|
| | 84 | * [wiki:CallGates Call gates/Driver API] |