General protection fault

Source: Wikipedia, the free encyclopedia.
Windows 3.1x

A general protection fault (GPF) in the

PC-compatible
system to contain an 80286, has hardware that detects the Shutdown state and automatically resets the CPU when it occurs. All descendants of the PC AT do the same, so in a PC, a triple fault causes an immediate system reset.

Specific behavior

Microsoft Windows

In Microsoft Windows, the general protection fault presents with varied language, depending on product version:

Operating system Error message Notes
Windows 3.0 UNRECOVERABLE APPLICATION ERROR

Terminating current application.

[1]
Windows 3.1x
[Program Name] caused a General Protection Fault in module [module name] at [memory address]. This error message (with the same design format) can also appear in later versions (95, 98 and Me) in rare occasions. The text of this error also appears in 95, 98 and Me if the 'Details' button is clicked or if Alt+D is pressed, with the addition of Registers, Bytes at CS:EIP and Stack Dump.
Windows 95
Windows 98
Windows NT 4.0
This program has performed an illegal operation and will be shut down.

If the problem persists, contact the program vendor.

Sometimes, the error also says, "Quit all programs, and then restart your computer", especially when the problem is more severe or when the system is unstable, and the return address points into a Windows DLL or other system processes. When a debugger is installed, there is also a Debug button between the Close and Details buttons.
Windows 2000 [Program Name] has generated errors and will be closed by Windows. You will need to restart the program.

An error log is being created.

Windows Me [Program Name] has caused an error in [Module Name]. [Program Name] will now close.

If you continue to experience problems, try restarting the computer.

When a debugger is installed, there is also a Debug button below the Close button. Details are still viewable by pressing Alt+D and via the faultlog.txt file.
Windows Server 2003 R2
[Program Name] has encountered a problem and needs to close. We are sorry for the inconvenience.

If you were in the middle of something, the information you were working on might be lost.

[...]

For more information about this error, click here.

The error message also offers the option to send error details to Microsoft for analysis.
Windows Vista and later, excluding Windows 10
Windows Server 2008 and later
[Program Name] has stopped working.

A problem caused the program to stop working correctly. Windows will close the program and notify you if a solution is available.

By default, Windows will send error details to Microsoft for analysis but the system can be configured to either not send, or ask the user what to do each time.
Windows 10
Windows 11
Windows will send error details to Microsoft for analysis. Users with a business license can configure how much information is sent.

Unix

In Linux and other Unices, the errors are reported separately (e.g. segmentation fault for memory errors).

Memory errors

In memory errors, the faulting program accesses memory that it should not access. Examples include:

  • Attempting to write to a read-only portion of memory
  • Attempting to execute
    instructions
  • Attempting to read as data bytes in memory which are designated as instructions
  • Other miscellaneous conflicts between the designation of a part of memory and its use

However, many modern operating systems implement their memory access-control schemes via paging instead of segmentation, so it is often the case that invalid memory references in operating systems such as Windows are reported via page faults instead of general protection faults. Operating systems typically provide an abstraction layer (such as exception handling or signals) that hides whatever internal processor mechanism was used to raise a memory access error from a program, for the purposes of providing a standard interface for handling many different types of processor-generated error conditions.

In terms of the x86 architecture, general protection faults are specific to segmentation-based protection when it comes to memory accesses. However, general protection faults are still used to report other protection violations (aside from memory access violations) when paging is used, such as the use of instructions not accessible from the

current privilege level
(CPL).

While it is theoretically possible for an operating system to utilize both paging and segmentation, for the most part, common operating systems typically rely on paging for the bulk of their memory access control needs.

Privilege errors

There are some things on a computer which are reserved for the exclusive use of the operating system. If a program which is not part of the operating system attempts to use one of these features, it may cause a general protection fault.

Additionally, there are storage locations which are reserved both for the operating system and the processor itself. As a consequence of their reservation, they are read-only and an attempt to write data to them by an unprivileged program produces an error.

Technical causes for faults

General protection faults are raised by the processor when a protected instruction is encountered which exceeds the permission level of the currently executing task, either because a user-mode program is attempting a protected instruction, or because the operating system has issued a request which would put the processor into an undefined state.

General protection faults are caught and handled by modern operating systems. Generally, if the fault originated in a user-mode program, the user-mode program is terminated. If, however, the fault originated in a core system driver or the operating system itself, the operating system usually saves diagnostic information either to a file or to the screen and stops operating. It either restarts the computer or displays an

Blue Screen of Death or kernel panic
.

Segment limits exceeded

Segment limits can be exceeded:

  • with code segment (CS), data segment (DS), or ES, FS, or GS (extra segment) registers; or
  • accessing descriptor tables such as the
    Local Descriptor Table
    (LDT).

Segment permissions violated

Segment permissions can be violated by:

  • jumping to non-executable segments
  • writing to code segments, or read only segments
  • reading execute-only segments

Segments illegally loaded

This can occur when:

  • a stack segment (SS) is loaded with a segment selector for a read only, executable, null segment, or segment with descriptor privilege not matching the current privilege in CS
  • a code segment (CS) loaded with a segment selector for a data, system, or null segment
  • SS, DS, ES, FS, or GS are segments loaded with a segment selector for a system segment
  • SS, DS, ES, FS, or GS are segments loaded with a segment selector for an execute-only code segment
  • accessing memory using DS, ES, FS, or GS registers, when they contain a null selector

Switching

Faults can occur in the task state segment (TSS) structure when:

  • switching to a busy task during a call or jump instruction
  • switching to an available task during an interrupt return (IRET) instruction
  • using a segment selector on a switch pointing to a TSS descriptor in the LDT[clarification needed]

Miscellaneous

Other causes of general protection faults are:

  • attempting to access an interrupt/exception handler from
    privilege level
    (DPL) is greater than zero
  • attempting to write a one into the reserved bits of CR4
  • attempting to execute privileged instructions when the current privilege level (CPL) is not zero
  • attempting to execute a single instruction with a length greater than 15 bytes (possibly by prepending the instruction with superfluous prefixes)[2][3]
  • writing to a reserved bit in an MSR instruction
  • accessing a gate containing a null segment selector
  • executing a software interrupt when the CPL is greater than the DPL set for the interrupt gate
  • the segment selector in a call, interrupt or trap gate does not point to a code segment
  • violating privilege rules
  • enabling paging whilst disabling protection
  • referencing the interrupt descriptor table following an interrupt or exception that is not an interrupt, trap, or a task gate
  • Legacy SSE: Memory operand is not 16-byte aligned.

References

  1. ^ "Troubleshooting "Unrecoverable Application Error" in DrWatson". Support. Microsoft. 27 February 2014.
  2. ^ "Page 223". Retrieved 2023-09-24.
  3. ^ Tornote - Privnote

Further reading

  • Intel Architecture Software Developer's Manual–Volume 3: System Programming