Warning

Si tiene alguna duda sobre la exactitud del contenido de esta traducción, la única referencia válida es la documentación oficial en inglés.

Original:

Documentation/process/magic-number.rst

Translator:

Carlos Bilbao <carlos.bilbao@amd.com>

Números mágicos de Linux

Este archivo es un registro de los números mágicos que están en uso. Cuando usted incluya un número mágico a una estructura, también debe agregarlo a este documento, ya que es mejor si los números mágicos utilizados por varias estructuras son únicos.

Es una muy buena idea proteger las estructuras de datos del kernel con números mágicos. Esto le permite verificar en tiempo de ejecución si (a) una estructura ha sido manipulada, o (b) ha pasado la estructura incorrecta a una rutina. Esto último es especialmente útil --- particularmente cuando pasa punteros a estructuras a través de un puntero void *. El código tty, por ejemplo, hace esto con frecuencia para pasar información específica del driver y líneas de estructuras específicas de protocolo de un lado al otro.

La forma de usar números mágicos es declararlos al principio de la estructura, así:

struct tty_ldisc {
        int     magic;
        ...
};

Por favor, siga este método cuando agregue futuras mejoras al kernel! Me ha ahorrado innumerables horas de depuración, especialmente en los casos complicados donde una matriz ha sido invadida y las estructuras que siguen a la matriz se han sobrescrito. Usando este método, estos casos se detectan de forma rápida y segura.

Changelog:

                                      Theodore Ts'o
                                      31 Mar 94

La tabla mágica ha sido actualizada para Linux 2.1.55.

                                      Michael Chastain
                                      <mailto:mec@shout.net>
                                      22 Sep 1997

Ahora debería estar actualizada con Linux 2.1.112. Porque
estamos en fase de "feature freeze", es muy poco probable que
algo cambiará antes de 2.2.x. Las entradas son
ordenados por campo numérico.

                                      Krzysztof G. Baranowski
                                      <mailto: kgb@knm.org.pl>
                                      29 Jul 1998

Se actualizó la tabla mágica a Linux 2.5.45. Justo sobre el feature
freeze, pero es posible que algunos nuevos números mágicos se cuelen en
el kernel antes de 2.6.x todavía.

                                      Petr Baudis
                                      <pasky@ucw.cz>
                                      03 Nov 2002

La tabla mágica ha sido actualizada para Linux 2.5.74.

                                      Fabian Frederick
                                      <ffrederick@users.sourceforge.net>
                                      09 Jul 2003

Magic Name

Number

Structure

File

PG_MAGIC

'P'

pg_{read,write}_hdr

include/linux/pg.h

APM_BIOS_MAGIC

0x4101

apm_user

arch/x86/kernel/apm_32.c

FASYNC_MAGIC

0x4601

fasync_struct

include/linux/fs.h

SLIP_MAGIC

0x5302

slip

drivers/net/slip.h

BAYCOM_MAGIC

0x19730510

baycom_state

drivers/net/baycom_epp.c

HDLCDRV_MAGIC

0x5ac6e778

hdlcdrv_state

include/linux/hdlcdrv.h

KV_MAGIC

0x5f4b565f

kernel_vars_s

arch/mips/include/asm/sn/klkernvars.h

CODA_MAGIC

0xC0DAC0DA

coda_file_info

fs/coda/coda_fs_i.h

YAM_MAGIC

0xF10A7654

yam_port

drivers/net/hamradio/yam.c

CCB_MAGIC

0xf2691ad2

ccb

drivers/scsi/ncr53c8xx.c

QUEUE_MAGIC_FREE

0xf7e1c9a3

queue_entry

drivers/scsi/arm/queue.c

QUEUE_MAGIC_USED

0xf7e1cc33

queue_entry

drivers/scsi/arm/queue.c

NMI_MAGIC

0x48414d4d455201

nmi_s

arch/mips/include/asm/sn/nmi.h