linux/Documentation/magic-number.txt
<<
>>
Prefs
   1This file is a registry of magic numbers which are in use.  When you
   2add a magic number to a structure, you should also add it to this
   3file, since it is best if the magic numbers used by various structures
   4are unique.
   5
   6It is a *very* good idea to protect kernel data structures with magic
   7numbers.  This allows you to check at run time whether (a) a structure
   8has been clobbered, or (b) you've passed the wrong structure to a
   9routine.  This last is especially useful --- particularly when you are
  10passing pointers to structures via a void * pointer.  The tty code,
  11for example, does this frequently to pass driver-specific and line
  12discipline-specific structures back and forth.
  13
  14The way to use magic numbers is to declare then at the beginning of
  15the structure, like so:
  16
  17struct tty_ldisc {
  18        int     magic;
  19        ...
  20};
  21
  22Please follow this discipline when you are adding future enhancements
  23to the kernel!  It has saved me countless hours of debugging,
  24especially in the screwy cases where an array has been overrun and
  25structures following the array have been overwritten.  Using this
  26discipline, these cases get detected quickly and safely.
  27
  28                                        Theodore Ts'o
  29                                        31 Mar 94
  30
  31The magic table is current to Linux 2.1.55.
  32
  33                                        Michael Chastain
  34                                        <mailto:mec@shout.net>
  35                                        22 Sep 1997
  36
  37Now it should be up to date with Linux 2.1.112. Because
  38we are in feature freeze time it is very unlikely that
  39something will change before 2.2.x. The entries are
  40sorted by number field.
  41
  42                                        Krzysztof G. Baranowski
  43                                        <mailto: kgb@knm.org.pl>
  44                                        29 Jul 1998
  45
  46Updated the magic table to Linux 2.5.45. Right over the feature freeze,
  47but it is possible that some new magic numbers will sneak into the
  48kernel before 2.6.x yet.
  49
  50                                        Petr Baudis
  51                                        <pasky@ucw.cz>
  52                                        03 Nov 2002
  53
  54Updated the magic table to Linux 2.5.74.
  55
  56                                        Fabian Frederick
  57                                        <ffrederick@users.sourceforge.net>
  58                                        09 Jul 2003
  59
  60
  61Magic Name            Number      Structure            File
  62===========================================================================
  63PG_MAGIC              'P'         pg_{read,write}_hdr include/linux/pg.h
  64CMAGIC                0x0111      user              include/linux/a.out.h
  65MKISS_DRIVER_MAGIC    0x04bf      mkiss_channel     drivers/net/mkiss.h
  66HDLC_MAGIC            0x239e      n_hdlc            drivers/char/n_hdlc.c
  67APM_BIOS_MAGIC        0x4101      apm_user          arch/x86/kernel/apm_32.c
  68CYCLADES_MAGIC        0x4359      cyclades_port     include/linux/cyclades.h
  69DB_MAGIC              0x4442      fc_info           drivers/net/iph5526_novram.c
  70DL_MAGIC              0x444d      fc_info           drivers/net/iph5526_novram.c
  71FASYNC_MAGIC          0x4601      fasync_struct     include/linux/fs.h
  72FF_MAGIC              0x4646      fc_info           drivers/net/iph5526_novram.c
  73ISICOM_MAGIC          0x4d54      isi_port          include/linux/isicom.h
  74PTY_MAGIC             0x5001                        drivers/char/pty.c
  75PPP_MAGIC             0x5002      ppp               include/linux/if_pppvar.h
  76SERIAL_MAGIC          0x5301      async_struct      include/linux/serial.h
  77SSTATE_MAGIC          0x5302      serial_state      include/linux/serial.h
  78SLIP_MAGIC            0x5302      slip              drivers/net/slip.h
  79STRIP_MAGIC           0x5303      strip             drivers/net/strip.c
  80X25_ASY_MAGIC         0x5303      x25_asy           drivers/net/x25_asy.h
  81SIXPACK_MAGIC         0x5304      sixpack           drivers/net/hamradio/6pack.h
  82AX25_MAGIC            0x5316      ax_disp           drivers/net/mkiss.h
  83TTY_MAGIC             0x5401      tty_struct        include/linux/tty.h
  84MGSL_MAGIC            0x5401      mgsl_info         drivers/char/synclink.c
  85TTY_DRIVER_MAGIC      0x5402      tty_driver        include/linux/tty_driver.h
  86MGSLPC_MAGIC          0x5402      mgslpc_info       drivers/char/pcmcia/synclink_cs.c
  87TTY_LDISC_MAGIC       0x5403      tty_ldisc         include/linux/tty_ldisc.h
  88USB_SERIAL_MAGIC      0x6702      usb_serial        drivers/usb/serial/usb-serial.h
  89FULL_DUPLEX_MAGIC     0x6969                        drivers/net/ethernet/dec/tulip/de2104x.c
  90USB_BLUETOOTH_MAGIC   0x6d02      usb_bluetooth     drivers/usb/class/bluetty.c
  91RFCOMM_TTY_MAGIC      0x6d02                        net/bluetooth/rfcomm/tty.c
  92USB_SERIAL_PORT_MAGIC 0x7301      usb_serial_port   drivers/usb/serial/usb-serial.h
  93CG_MAGIC              0x00090255  ufs_cylinder_group include/linux/ufs_fs.h
  94RPORT_MAGIC           0x00525001  r_port            drivers/char/rocket_int.h
  95LSEMAGIC              0x05091998  lse               drivers/fc4/fc.c
  96GDTIOCTL_MAGIC        0x06030f07  gdth_iowr_str     drivers/scsi/gdth_ioctl.h
  97RIEBL_MAGIC           0x09051990                    drivers/net/atarilance.c
  98NBD_REQUEST_MAGIC     0x12560953  nbd_request       include/linux/nbd.h
  99RED_MAGIC2            0x170fc2a5  (any)             mm/slab.c
 100BAYCOM_MAGIC          0x19730510  baycom_state      drivers/net/baycom_epp.c
 101ISDN_X25IFACE_MAGIC   0x1e75a2b9  isdn_x25iface_proto_data
 102                                                    drivers/isdn/isdn_x25iface.h
 103ECP_MAGIC             0x21504345  cdkecpsig         include/linux/cdk.h
 104LSOMAGIC              0x27091997  lso               drivers/fc4/fc.c
 105LSMAGIC               0x2a3b4d2a  ls                drivers/fc4/fc.c
 106WANPIPE_MAGIC         0x414C4453  sdla_{dump,exec}  include/linux/wanpipe.h
 107CS_CARD_MAGIC         0x43525553  cs_card           sound/oss/cs46xx.c
 108LABELCL_MAGIC         0x4857434c  labelcl_info_s    include/asm/ia64/sn/labelcl.h
 109ISDN_ASYNC_MAGIC      0x49344C01  modem_info        include/linux/isdn.h
 110CTC_ASYNC_MAGIC       0x49344C01  ctc_tty_info      drivers/s390/net/ctctty.c
 111ISDN_NET_MAGIC        0x49344C02  isdn_net_local_s  drivers/isdn/i4l/isdn_net_lib.h
 112SAVEKMSG_MAGIC2       0x4B4D5347  savekmsg          arch/*/amiga/config.c
 113CS_STATE_MAGIC        0x4c4f4749  cs_state          sound/oss/cs46xx.c
 114SLAB_C_MAGIC          0x4f17a36d  kmem_cache        mm/slab.c
 115COW_MAGIC             0x4f4f4f4d  cow_header_v1     arch/um/drivers/ubd_user.c
 116I810_CARD_MAGIC       0x5072696E  i810_card         sound/oss/i810_audio.c
 117TRIDENT_CARD_MAGIC    0x5072696E  trident_card      sound/oss/trident.c
 118ROUTER_MAGIC          0x524d4157  wan_device        [in wanrouter.h pre 3.9]
 119SAVEKMSG_MAGIC1       0x53415645  savekmsg          arch/*/amiga/config.c
 120GDA_MAGIC             0x58464552  gda               arch/mips/include/asm/sn/gda.h
 121RED_MAGIC1            0x5a2cf071  (any)             mm/slab.c
 122EEPROM_MAGIC_VALUE    0x5ab478d2  lanai_dev         drivers/atm/lanai.c
 123HDLCDRV_MAGIC         0x5ac6e778  hdlcdrv_state     include/linux/hdlcdrv.h
 124PCXX_MAGIC            0x5c6df104  channel           drivers/char/pcxx.h
 125KV_MAGIC              0x5f4b565f  kernel_vars_s     arch/mips/include/asm/sn/klkernvars.h
 126I810_STATE_MAGIC      0x63657373  i810_state        sound/oss/i810_audio.c
 127TRIDENT_STATE_MAGIC   0x63657373  trient_state      sound/oss/trident.c
 128M3_CARD_MAGIC         0x646e6f50  m3_card           sound/oss/maestro3.c
 129FW_HEADER_MAGIC       0x65726F66  fw_header         drivers/atm/fore200e.h
 130SLOT_MAGIC            0x67267321  slot              drivers/hotplug/cpqphp.h
 131SLOT_MAGIC            0x67267322  slot              drivers/hotplug/acpiphp.h
 132LO_MAGIC              0x68797548  nbd_device        include/linux/nbd.h
 133OPROFILE_MAGIC        0x6f70726f  super_block       drivers/oprofile/oprofilefs.h
 134M3_STATE_MAGIC        0x734d724d  m3_state          sound/oss/maestro3.c
 135VMALLOC_MAGIC         0x87654320  snd_alloc_track   sound/core/memory.c
 136KMALLOC_MAGIC         0x87654321  snd_alloc_track   sound/core/memory.c
 137PWC_MAGIC             0x89DC10AB  pwc_device        drivers/usb/media/pwc.h
 138NBD_REPLY_MAGIC       0x96744668  nbd_reply         include/linux/nbd.h
 139ENI155_MAGIC          0xa54b872d  midway_eprom      drivers/atm/eni.h
 140CODA_MAGIC            0xC0DAC0DA  coda_file_info    fs/coda/coda_fs_i.h
 141DPMEM_MAGIC           0xc0ffee11  gdt_pci_sram      drivers/scsi/gdth.h
 142YAM_MAGIC             0xF10A7654  yam_port          drivers/net/hamradio/yam.c
 143CCB_MAGIC             0xf2691ad2  ccb               drivers/scsi/ncr53c8xx.c
 144QUEUE_MAGIC_FREE      0xf7e1c9a3  queue_entry       drivers/scsi/arm/queue.c
 145QUEUE_MAGIC_USED      0xf7e1cc33  queue_entry       drivers/scsi/arm/queue.c
 146HTB_CMAGIC            0xFEFAFEF1  htb_class         net/sched/sch_htb.c
 147NMI_MAGIC             0x48414d4d455201 nmi_s        arch/mips/include/asm/sn/nmi.h
 148
 149Note that there are also defined special per-driver magic numbers in sound
 150memory management. See include/sound/sndmagic.h for complete list of them. Many
 151OSS sound drivers have their magic numbers constructed from the soundcard PCI
 152ID - these are not listed here as well.
 153
 154IrDA subsystem also uses large number of own magic numbers, see
 155include/net/irda/irda.h for a complete list of them.
 156
 157HFS is another larger user of magic numbers - you can find them in
 158fs/hfs/hfs.h.
 159