Back to home page

OSCL-LXR

 
 

    


0001 .. _magicnumbers:
0002 
0003 Linux magic numbers
0004 ===================
0005 
0006 This file is a registry of magic numbers which are in use.  When you
0007 add a magic number to a structure, you should also add it to this
0008 file, since it is best if the magic numbers used by various structures
0009 are unique.
0010 
0011 It is a **very** good idea to protect kernel data structures with magic
0012 numbers.  This allows you to check at run time whether (a) a structure
0013 has been clobbered, or (b) you've passed the wrong structure to a
0014 routine.  This last is especially useful --- particularly when you are
0015 passing pointers to structures via a void * pointer.  The tty code,
0016 for example, does this frequently to pass driver-specific and line
0017 discipline-specific structures back and forth.
0018 
0019 The way to use magic numbers is to declare them at the beginning of
0020 the structure, like so::
0021 
0022         struct tty_ldisc {
0023                 int     magic;
0024                 ...
0025         };
0026 
0027 Please follow this discipline when you are adding future enhancements
0028 to the kernel!  It has saved me countless hours of debugging,
0029 especially in the screwy cases where an array has been overrun and
0030 structures following the array have been overwritten.  Using this
0031 discipline, these cases get detected quickly and safely.
0032 
0033 Changelog::
0034 
0035                                         Theodore Ts'o
0036                                         31 Mar 94
0037 
0038   The magic table is current to Linux 2.1.55.
0039 
0040                                         Michael Chastain
0041                                         <mailto:mec@shout.net>
0042                                         22 Sep 1997
0043 
0044   Now it should be up to date with Linux 2.1.112. Because
0045   we are in feature freeze time it is very unlikely that
0046   something will change before 2.2.x. The entries are
0047   sorted by number field.
0048 
0049                                         Krzysztof G. Baranowski
0050                                         <mailto: kgb@knm.org.pl>
0051                                         29 Jul 1998
0052 
0053   Updated the magic table to Linux 2.5.45. Right over the feature freeze,
0054   but it is possible that some new magic numbers will sneak into the
0055   kernel before 2.6.x yet.
0056 
0057                                         Petr Baudis
0058                                         <pasky@ucw.cz>
0059                                         03 Nov 2002
0060 
0061   Updated the magic table to Linux 2.5.74.
0062 
0063                                         Fabian Frederick
0064                                         <ffrederick@users.sourceforge.net>
0065                                         09 Jul 2003
0066 
0067 
0068 ===================== ================ ======================== ==========================================
0069 Magic Name            Number           Structure                File
0070 ===================== ================ ======================== ==========================================
0071 PG_MAGIC              'P'              pg_{read,write}_hdr      ``include/linux/pg.h``
0072 CMAGIC                0x0111           user                     ``include/linux/a.out.h``
0073 MKISS_DRIVER_MAGIC    0x04bf           mkiss_channel            ``drivers/net/mkiss.h``
0074 HDLC_MAGIC            0x239e           n_hdlc                   ``drivers/char/n_hdlc.c``
0075 APM_BIOS_MAGIC        0x4101           apm_user                 ``arch/x86/kernel/apm_32.c``
0076 DB_MAGIC              0x4442           fc_info                  ``drivers/net/iph5526_novram.c``
0077 DL_MAGIC              0x444d           fc_info                  ``drivers/net/iph5526_novram.c``
0078 FASYNC_MAGIC          0x4601           fasync_struct            ``include/linux/fs.h``
0079 FF_MAGIC              0x4646           fc_info                  ``drivers/net/iph5526_novram.c``
0080 PTY_MAGIC             0x5001                                    ``drivers/char/pty.c``
0081 PPP_MAGIC             0x5002           ppp                      ``include/linux/if_pppvar.h``
0082 SSTATE_MAGIC          0x5302           serial_state             ``include/linux/serial.h``
0083 SLIP_MAGIC            0x5302           slip                     ``drivers/net/slip.h``
0084 STRIP_MAGIC           0x5303           strip                    ``drivers/net/strip.c``
0085 SIXPACK_MAGIC         0x5304           sixpack                  ``drivers/net/hamradio/6pack.h``
0086 AX25_MAGIC            0x5316           ax_disp                  ``drivers/net/mkiss.h``
0087 TTY_MAGIC             0x5401           tty_struct               ``include/linux/tty.h``
0088 MGSL_MAGIC            0x5401           mgsl_info                ``drivers/char/synclink.c``
0089 TTY_DRIVER_MAGIC      0x5402           tty_driver               ``include/linux/tty_driver.h``
0090 MGSLPC_MAGIC          0x5402           mgslpc_info              ``drivers/char/pcmcia/synclink_cs.c``
0091 USB_SERIAL_MAGIC      0x6702           usb_serial               ``drivers/usb/serial/usb-serial.h``
0092 FULL_DUPLEX_MAGIC     0x6969                                    ``drivers/net/ethernet/dec/tulip/de2104x.c``
0093 USB_BLUETOOTH_MAGIC   0x6d02           usb_bluetooth            ``drivers/usb/class/bluetty.c``
0094 RFCOMM_TTY_MAGIC      0x6d02                                    ``net/bluetooth/rfcomm/tty.c``
0095 USB_SERIAL_PORT_MAGIC 0x7301           usb_serial_port          ``drivers/usb/serial/usb-serial.h``
0096 CG_MAGIC              0x00090255       ufs_cylinder_group       ``include/linux/ufs_fs.h``
0097 LSEMAGIC              0x05091998       lse                      ``drivers/fc4/fc.c``
0098 RIEBL_MAGIC           0x09051990                                ``drivers/net/atarilance.c``
0099 NBD_REQUEST_MAGIC     0x12560953       nbd_request              ``include/linux/nbd.h``
0100 RED_MAGIC2            0x170fc2a5       (any)                    ``mm/slab.c``
0101 BAYCOM_MAGIC          0x19730510       baycom_state             ``drivers/net/baycom_epp.c``
0102 ISDN_X25IFACE_MAGIC   0x1e75a2b9       isdn_x25iface_proto_data ``drivers/isdn/isdn_x25iface.h``
0103 ECP_MAGIC             0x21504345       cdkecpsig                ``include/linux/cdk.h``
0104 LSOMAGIC              0x27091997       lso                      ``drivers/fc4/fc.c``
0105 LSMAGIC               0x2a3b4d2a       ls                       ``drivers/fc4/fc.c``
0106 WANPIPE_MAGIC         0x414C4453       sdla_{dump,exec}         ``include/linux/wanpipe.h``
0107 CS_CARD_MAGIC         0x43525553       cs_card                  ``sound/oss/cs46xx.c``
0108 LABELCL_MAGIC         0x4857434c       labelcl_info_s           ``include/asm/ia64/sn/labelcl.h``
0109 ISDN_ASYNC_MAGIC      0x49344C01       modem_info               ``include/linux/isdn.h``
0110 CTC_ASYNC_MAGIC       0x49344C01       ctc_tty_info             ``drivers/s390/net/ctctty.c``
0111 ISDN_NET_MAGIC        0x49344C02       isdn_net_local_s         ``drivers/isdn/i4l/isdn_net_lib.h``
0112 SAVEKMSG_MAGIC2       0x4B4D5347       savekmsg                 ``arch/*/amiga/config.c``
0113 CS_STATE_MAGIC        0x4c4f4749       cs_state                 ``sound/oss/cs46xx.c``
0114 SLAB_C_MAGIC          0x4f17a36d       kmem_cache               ``mm/slab.c``
0115 COW_MAGIC             0x4f4f4f4d       cow_header_v1            ``arch/um/drivers/ubd_user.c``
0116 I810_CARD_MAGIC       0x5072696E       i810_card                ``sound/oss/i810_audio.c``
0117 TRIDENT_CARD_MAGIC    0x5072696E       trident_card             ``sound/oss/trident.c``
0118 ROUTER_MAGIC          0x524d4157       wan_device               [in ``wanrouter.h`` pre 3.9]
0119 SAVEKMSG_MAGIC1       0x53415645       savekmsg                 ``arch/*/amiga/config.c``
0120 GDA_MAGIC             0x58464552       gda                      ``arch/mips/include/asm/sn/gda.h``
0121 RED_MAGIC1            0x5a2cf071       (any)                    ``mm/slab.c``
0122 EEPROM_MAGIC_VALUE    0x5ab478d2       lanai_dev                ``drivers/atm/lanai.c``
0123 HDLCDRV_MAGIC         0x5ac6e778       hdlcdrv_state            ``include/linux/hdlcdrv.h``
0124 PCXX_MAGIC            0x5c6df104       channel                  ``drivers/char/pcxx.h``
0125 KV_MAGIC              0x5f4b565f       kernel_vars_s            ``arch/mips/include/asm/sn/klkernvars.h``
0126 I810_STATE_MAGIC      0x63657373       i810_state               ``sound/oss/i810_audio.c``
0127 TRIDENT_STATE_MAGIC   0x63657373       trient_state             ``sound/oss/trident.c``
0128 M3_CARD_MAGIC         0x646e6f50       m3_card                  ``sound/oss/maestro3.c``
0129 FW_HEADER_MAGIC       0x65726F66       fw_header                ``drivers/atm/fore200e.h``
0130 SLOT_MAGIC            0x67267321       slot                     ``drivers/hotplug/cpqphp.h``
0131 SLOT_MAGIC            0x67267322       slot                     ``drivers/hotplug/acpiphp.h``
0132 LO_MAGIC              0x68797548       nbd_device               ``include/linux/nbd.h``
0133 M3_STATE_MAGIC        0x734d724d       m3_state                 ``sound/oss/maestro3.c``
0134 VMALLOC_MAGIC         0x87654320       snd_alloc_track          ``sound/core/memory.c``
0135 KMALLOC_MAGIC         0x87654321       snd_alloc_track          ``sound/core/memory.c``
0136 PWC_MAGIC             0x89DC10AB       pwc_device               ``drivers/usb/media/pwc.h``
0137 NBD_REPLY_MAGIC       0x96744668       nbd_reply                ``include/linux/nbd.h``
0138 ENI155_MAGIC          0xa54b872d       midway_eprom             ``drivers/atm/eni.h``
0139 CODA_MAGIC            0xC0DAC0DA       coda_file_info           ``fs/coda/coda_fs_i.h``
0140 YAM_MAGIC             0xF10A7654       yam_port                 ``drivers/net/hamradio/yam.c``
0141 CCB_MAGIC             0xf2691ad2       ccb                      ``drivers/scsi/ncr53c8xx.c``
0142 QUEUE_MAGIC_FREE      0xf7e1c9a3       queue_entry              ``drivers/scsi/arm/queue.c``
0143 QUEUE_MAGIC_USED      0xf7e1cc33       queue_entry              ``drivers/scsi/arm/queue.c``
0144 HTB_CMAGIC            0xFEFAFEF1       htb_class                ``net/sched/sch_htb.c``
0145 NMI_MAGIC             0x48414d4d455201 nmi_s                    ``arch/mips/include/asm/sn/nmi.h``
0146 ===================== ================ ======================== ==========================================
0147 
0148 Note that there are also defined special per-driver magic numbers in sound
0149 memory management. See ``include/sound/sndmagic.h`` for complete list of them. Many
0150 OSS sound drivers have their magic numbers constructed from the soundcard PCI
0151 ID - these are not listed here as well.
0152 
0153 HFS is another larger user of magic numbers - you can find them in
0154 ``fs/hfs/hfs.h``.