| 1 | .. _magicnumbers:
|
| 2 |
|
| 3 | Linux magic numbers
|
| 4 | ===================
|
| 5 |
|
| 6 | This file is a registry of magic numbers which are in use. When you
|
| 7 | add a magic number to a structure, you should also add it to this
|
| 8 | file, since it is best if the magic numbers used by various structures
|
| 9 | are unique.
|
| 10 |
|
| 11 | It is a **very** good idea to protect kernel data structures with magic
|
| 12 | numbers. This allows you to check at run time whether (a) a structure
|
| 13 | has been clobbered, or (b) you've passed the wrong structure to a
|
| 14 | routine. This last is especially useful --- particularly when you are
|
| 15 | passing pointers to structures via a void * pointer. The tty code,
|
| 16 | for example, does this frequently to pass driver-specific and line
|
| 17 | discipline-specific structures back and forth.
|
| 18 |
|
| 19 | The way to use magic numbers is to declare them at the beginning of
|
| 20 | the structure, like so::
|
| 21 |
|
| 22 | struct tty_ldisc {
|
| 23 | int magic;
|
| 24 | ...
|
| 25 | };
|
| 26 |
|
| 27 | Please follow this discipline when you are adding future enhancements
|
| 28 | to the kernel! It has saved me countless hours of debugging,
|
| 29 | especially in the screwy cases where an array has been overrun and
|
| 30 | structures following the array have been overwritten. Using this
|
| 31 | discipline, these cases get detected quickly and safely.
|
| 32 |
|
| 33 | Changelog::
|
| 34 |
|
| 35 | Theodore Ts'o
|
| 36 | 31 Mar 94
|
| 37 |
|
| 38 | The magic table is current to Linux 2.1.55.
|
| 39 |
|
| 40 | Michael Chastain
|
| 41 | <mailto:[email protected]>
|
| 42 | 22 Sep 1997
|
| 43 |
|
| 44 | Now it should be up to date with Linux 2.1.112. Because
|
| 45 | we are in feature freeze time it is very unlikely that
|
| 46 | something will change before 2.2.x. The entries are
|
| 47 | sorted by number field.
|
| 48 |
|
| 49 | Krzysztof G. Baranowski
|
| 50 | <mailto: [email protected]>
|
| 51 | 29 Jul 1998
|
| 52 |
|
| 53 | Updated the magic table to Linux 2.5.45. Right over the feature freeze,
|
| 54 | but it is possible that some new magic numbers will sneak into the
|
| 55 | kernel before 2.6.x yet.
|
| 56 |
|
| 57 | Petr Baudis
|
| 58 | <[email protected]>
|
| 59 | 03 Nov 2002
|
| 60 |
|
| 61 | Updated the magic table to Linux 2.5.74.
|
| 62 |
|
| 63 | Fabian Frederick
|
| 64 | <[email protected]>
|
| 65 | 09 Jul 2003
|
| 66 |
|
| 67 |
|
| 68 | ===================== ================ ======================== ==========================================
|
| 69 | Magic Name Number Structure File
|
| 70 | ===================== ================ ======================== ==========================================
|
| 71 | PG_MAGIC 'P' pg_{read,write}_hdr ``include/uapi/linux/pg.h``
|
| 72 | APM_BIOS_MAGIC 0x4101 apm_user ``arch/x86/kernel/apm_32.c``
|
| 73 | FASYNC_MAGIC 0x4601 fasync_struct ``include/linux/fs.h``
|
| 74 | SLIP_MAGIC 0x5302 slip ``drivers/net/slip/slip.h``
|
| 75 | KV_MAGIC 0x5f4b565f kernel_vars_s ``arch/mips/include/asm/sn/klkernvars.h``
|
| 76 | CODA_MAGIC 0xC0DAC0DA coda_file_info ``fs/coda/coda_fs_i.h``
|
| 77 | CCB_MAGIC 0xf2691ad2 ccb ``drivers/scsi/ncr53c8xx.c``
|
| 78 | QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry ``drivers/scsi/arm/queue.c``
|
| 79 | QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry ``drivers/scsi/arm/queue.c``
|
| 80 | NMI_MAGIC 0x48414d4d455201 nmi_s ``arch/mips/include/asm/sn/nmi.h``
|
| 81 | ===================== ================ ======================== ==========================================
|