Debugging Kernel Oops documentation

Andy Green andy at
Wed Mar 2 18:00:41 UTC 2011

On 03/02/2011 05:50 PM, Somebody in the thread at some point said:
> Looking at the debugging kernel Oops documentation[1] I decided to cross
> reference the information on tainted kernels with all the Oops reports
> in Launchpad.  Lo and behold I came across some undocumented tainted
> values. So what do the following characters represent?
> 1) C
> 2) W
> 3) I
> For bonus points where can people look that up?

Kernel Documentation is pretty okay for this -->


Tainted kernels:

Some oops reports contain the string 'Tainted: ' after the program
counter. This indicates that the kernel has been tainted by some
mechanism.  The string is followed by a series of position-sensitive
characters, each representing a particular tainted value.

   1: 'G' if all modules loaded have a GPL or compatible license, 'P' if
      any proprietary module has been loaded.  Modules without a
      MODULE_LICENSE or with a MODULE_LICENSE that is not recognised by
      insmod as GPL compatible are assumed to be proprietary.

   2: 'F' if any module was force loaded by "insmod -f", ' ' if all
      modules were loaded normally.

   3: 'S' if the oops occurred on an SMP kernel running on hardware that
      hasn't been certified as safe to run multiprocessor.
      Currently this occurs only on various Athlons that are not
      SMP capable.

   4: 'R' if a module was force unloaded by "rmmod -f", ' ' if all
      modules were unloaded normally.

   5: 'M' if any processor has reported a Machine Check Exception,
      ' ' if no Machine Check Exceptions have occurred.

   6: 'B' if a page-release function has found a bad page reference or
      some unexpected page flags.

   7: 'U' if a user or user application specifically requested that the
      Tainted flag be set, ' ' otherwise.

   8: 'D' if the kernel has died recently, i.e. there was an OOPS or BUG.

   9: 'A' if the ACPI table has been overridden.

  10: 'W' if a warning has previously been issued by the kernel.
      (Though some warnings may set more specific taint flags.)

  11: 'C' if a staging driver has been loaded.

  12: 'I' if the kernel is working around a severe bug in the platform
      firmware (BIOS or similar).

You can find out how tainted you are without blowing an OOPS -->

# cat /proc/sys/kernel/tainted



Non-zero if the kernel has been tainted.  Numeric values, which
can be ORed together:

    1 - A module with a non-GPL license has been loaded, this
        includes modules with no license.
        Set by modutils >= 2.4.9 and module-init-tools.
    2 - A module was force loaded by insmod -f.
        Set by modutils >= 2.4.9 and module-init-tools.
    4 - Unsafe SMP processors: SMP with CPUs not designed for SMP.
    8 - A module was forcibly unloaded from the system by rmmod -f.
   16 - A hardware machine check error occurred on the system.
   32 - A bad page was discovered on the system.
   64 - The user has asked that the system be marked "tainted".  This
        could be because they are running software that directly modifies
        the hardware, or for other reasons.
  128 - The system has died.
  256 - The ACPI DSDT has been overridden with one supplied by the user
         instead of using the one provided by the hardware.
  512 - A kernel warning has occurred.
1024 - A module from drivers/staging was loaded.


More information about the kernel-team mailing list