patch-1.3.99 linux/Documentation/magic-number.txt

Next file: linux/Documentation/networking/arcnet-hardware.txt
Previous file: linux/Documentation/isdn/README
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.98/linux/Documentation/magic-number.txt linux/Documentation/magic-number.txt
@@ -0,0 +1,61 @@
+This file is a registry of magic numbers which are in use.  When you
+add a magic number to a structure, you should also add it to this
+file, since it is best if the magic numbers used by various structures
+are unique.
+
+It is a *very* good idea to protect kernel data structures with magic
+numbers.  This allows you to check at run time whether (a) a structure
+has been clobbered, or (b) you've passed the wrong structure to a
+routine.  This last is especially useful --- particularly when you are
+passing pointers to structures via a void * pointer.  The tty code,
+for example, does this frequently to pass driver-specific and line
+discipline-specific structures back and forth.
+
+The way to use magic numbers is to declare then at the beginning of
+the structure, like so:
+
+struct tty_ldisc {
+	int	magic;
+	...
+};
+
+Please follow this discipline when you are adding future enhancements
+to the kernel!  It has saved me countless hours of debugging,
+especially in the screw cases where an array has been overrun and
+structures following the array have been overwritten.  Using this
+discipline, these cases get detected quickly and safely.
+
+					Theodore Ts'o
+					31-Mar-94
+
+The magic table is current to Linux 1.3.98.
+
+					Michael Chastain
+					<mec@duracef.shout.net>
+					6 May 1996
+
+
+
+Magic Name          Number      Structure            File
+===========================================================================
+RISCOM8_MAGIC       0x0907      struct riscom_port   drivers/char/riscom8.h
+APM_BIOS_MAGIC      0x4101      struct apm_struct    include/linux/apm_bios.h
+CYCLADES_MAGIC      0x4359      struct cyclades_port include/linux/cyclades.h
+FASYNC_MAGIC        0x4601      struct fasync_struct include/linux/fs.h
+PTY_MAGIC           0x5001      struct pty_struct    drivers/char/pty.c
+PPP_MAGIC           0x5002      struct ppp_struct    include/linux/if_ppp.h
+SERIAL_MAGIC        0x5301      struct async_struct  include/linux/serial.h
+SLIP_MAGIC          0x5302      struct slip          drivers/net/slip.h
+STRIP_MAGIC         0x5303      struct strip         drivers/net/strip.c
+TTY_MAGIC           0x5401      struct tty_struct    include/linux/tty.h
+TTY_DRIVER_MAGIC    0x5402      struct tty_driver    include/linux/tty_driver.h
+TTY_LDISC_MAGIC     0x5403      struct tty_ldisc     include/linux/tty_ldisc.h
+SCC_MAGIC           0x8530      struct scc_channel   include/linux/scc.h
+ISDN_ASYNC_MAGIC    0x49344C01  modem_info           include/linux/isdn.h
+ISDN_NET_MAGIC      0x49344C02  isdn_net_ndev        include/linux/isdn.h
+STLI_BOARDMAGIC     0x4bc6c825  stlibrd_t            include/linux/istallion.h
+STLI_PORTMAGIC      0xe671c7a1  stliport_t           include/linux/istallion.h
+STL_PANELMAGIC      0x7ef621a1  stlpanel_t           include/linux/stallion.h
+STL_BOARDMAGIC      0xa2267f52  stlbrd_t             include/linux/stallion.h
+STL_PORTMAGIC       0x5a7182c9  stlport_t            include/linux/stallion.h
+PCXX_MAGIC          0x5c6df104  struct channel       drivers/char/pcxx.h

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this