
Código fuente del kernel de Linux 4.1.15 con enfoque en CVE-2022-45934, que proporciona una referencia para análisis de vulnerabilidades e investigación de explotación.
Versión del kernel Linux 4.x http://kernel.org/
Estas son las notas de la versión para Linux versión 4. Léelas con atención, ya que te explican de qué va todo esto, cómo instalar el kernel y qué hacer si algo sale mal.
¿QUÉ ES LINUX?
Linux es un clon del sistema operativo Unix, escrito desde cero por Linus Torvalds con la ayuda de un equipo poco cohesionado de hackers de toda la Red. Su objetivo es cumplir con POSIX y con la Single UNIX Specification.
Tiene todas las características que cabría esperar de un Unix moderno y completo, incluyendo multitarea real, memoria virtual, bibliotecas compartidas, carga bajo demanda, ejecutables compartidos con copia en escritura, una gestión de memoria adecuada y redes de múltiples pilas, incluyendo IPv4 e IPv6.
Se distribuye bajo la Licencia Pública General de GNU; consulta el archivo COPYING adjunto para más detalles.
¿EN QUÉ HARDWARE SE EJECUTA?
Aunque originalmente se desarrolló primero para PCs basados en x86 de 32 bits (386 o superiores), hoy en día Linux también se ejecuta en (al menos) las arquitecturas Compaq Alpha AXP, Sun SPARC y UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS, Xtensa, Tilera TILE, AVR32 y Renesas M32R.
Linux es fácilmente portable a la mayoría de las arquitecturas de propósito general de 32 o 64 bits, siempre que tengan una unidad de gestión de memoria paginada (PMMU) y un port del compilador GNU C (gcc) (parte de The GNU Compiler Collection, GCC). Linux también ha sido portado a varias arquitecturas sin PMMU, aunque en ese caso la funcionalidad es evidentemente algo limitada. Linux también ha sido portado a sí mismo. Ahora puedes ejecutar el kernel como una aplicación de espacio de usuario; esto se llama UserMode Linux (UML).
DOCUMENTACIÓN:
Hay mucha documentación disponible tanto en formato electrónico en Internet como en libros, tanto específica de Linux como relativa a cuestiones generales de UNIX. Recomendaría revisar los subdirectorios de documentación de cualquier sitio FTP de Linux para encontrar los libros del LDP (Linux Documentation Project). Este README no pretende ser documentación sobre el sistema: hay fuentes mucho mejores disponibles.
Hay varios archivos README en el subdirectorio Documentation/: normalmente contienen notas de instalación específicas del kernel para algunos controladores, por ejemplo. Consulta Documentation/00-INDEX para ver una lista de lo que contiene cada archivo. Por favor, lee el archivo Changes, ya que contiene información sobre los problemas que pueden surgir al actualizar tu kernel.
El subdirectorio Documentation/DocBook/ contiene varias guías para desarrolladores y usuarios del kernel. Estas guías se pueden generar en varios formatos: PostScript (.ps), PDF, HTML y páginas man, entre otros. Tras la instalación, "make psdocs", "make pdfdocs", "make htmldocs" o "make mandocs" generarán la documentación en el formato solicitado.
INSTALANDO EL CÓDIGO FUENTE DEL KERNEL:
Si instalas las fuentes completas, coloca el tarball del kernel en un directorio donde tengas permisos (p. ej., tu directorio personal) y descomprímelo:
xz -cd linux-4.X.tar.xz | tar xvf -
Sustituye "X" por el número de versión del kernel más reciente.
¡NO uses el área /usr/src/linux! Esta área contiene un conjunto (normalmente incompleto) de cabeceras del kernel que utilizan los archivos de cabecera de las bibliotecas. Deben coincidir con la biblioteca y no deben verse alteradas por el kernel que esté de turno (kernel-du-jour).
También puedes actualizar entre versiones 4.x aplicando parches. Los parches se distribuyen en formato xz. Para instalar mediante parches, consigue todos los archivos de parche más recientes, entra en el directorio de nivel superior del código fuente del kernel (linux-4.X) y ejecuta:
xz -cd ../patch-4.x.xz | patch -p1
Sustituye "x" por todas las versiones posteriores a la versión "X" de tu árbol de fuentes actual, en orden, y todo debería ir bien. Puede que quieras eliminar los archivos de respaldo (some-file-name~ o some-file-name.orig) y asegurarte de que no haya parches fallidos (some-file-name# o some-file-name.rej). Si los hay, o tú o yo hemos cometido un error.
A diferencia de los parches para los kernels 4.x, los parches para los kernels 4.x.y (también conocidos como kernels -stable) no son incrementales, sino que se aplican directamente sobre el kernel base 4.x. Por ejemplo, si tu kernel base es 4.0 y quieres aplicar el parche 4.0.3, no debes aplicar primero los parches 4.0.1 y 4.0.2. Del mismo modo, si estás ejecutando la versión 4.0.2 del kernel y quieres saltar a la 4.0.3, primero debes revertir el parche 4.0.2 (es decir, patch -R) antes de aplicar el parche 4.0.3. Puedes leer más sobre esto en Documentation/applying-patches.txt
Alternativamente, el script patch-kernel se puede utilizar para automatizar este proceso. Determina la versión actual del kernel y aplica cualquier parche que encuentre.
linux/scripts/patch-kernel linux
El primer argumento del comando anterior es la ubicación del código fuente del kernel. Los parches se aplican desde el directorio actual, pero se puede especificar un directorio alternativo como segundo argumento.
Asegúrate de que no queden archivos .o obsoletos ni dependencias por ahí:
cd linux make mrproper
Ahora deberías tener las fuentes correctamente instaladas.
REQUISITOS DE SOFTWARE
Compilar y ejecutar los kernels 4.x requiere versiones actualizadas de varios paquetes de software. Consulta Documentation/Changes para conocer los números de versión mínimos necesarios y cómo obtener actualizaciones de estos paquetes. Ten cuidado: el uso de versiones excesivamente antiguas de estos paquetes puede provocar errores indirectos muy difíciles de rastrear, así que no des por sentado que basta con actualizar los paquetes cuando surjan problemas evidentes durante la compilación o el funcionamiento.
DIRECTORIO DE COMPILACIÓN PARA EL KERNEL:
Al compilar el kernel, todos los archivos de salida se almacenarán por defecto junto con el código fuente del kernel. El uso de la opción "make O=output/dir" permite especificar una ubicación alternativa para los archivos de salida (incluido .config). Ejemplo:
kernel source code: /usr/src/linux-4.X
build directory: /home/name/build/kernel
Para configurar y compilar el kernel, usa:
cd /usr/src/linux-4.X
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
Por favor, ten en cuenta: si se utiliza la opción 'O=output/dir', debe usarse en todas las invocaciones de make.
CONFIGURANDO EL KERNEL:
No te saltes este paso, aunque solo estés actualizando una versión menor. En cada versión se añaden nuevas opciones de configuración, y aparecerán problemas extraños si los archivos de configuración no están establecidos como se espera. Si quieres trasladar tu configuración existente a una nueva versión con el mínimo esfuerzo, usa "make oldconfig", que solo te pedirá las respuestas a las preguntas nuevas.
Los comandos de configuración alternativos son:
"make config" Interfaz de texto plano.
"make menuconfig" Menús de color basados en texto, listas de radio y diálogos.
"make nconfig" Menús de color basados en texto mejorados.
"make xconfig" Herramienta de configuración basada en ventanas X (Qt).
"make gconfig" Herramienta de configuración basada en ventanas X (Gtk).