
Исходный код ядра Linux 4.1.15 с акцентом на CVE-2023-26607, служащий справочным материалом для анализа уязвимости и понимания затронутого кода.
Релиз ядра Linux 4.x http://kernel.org/
Это заметки о релизе для версии ядра Linux 4. Внимательно прочитайте их, поскольку они объясняют, что это такое, как установить ядро, и что делать, если что-то пошло не так.
ЧТО ТАКОЕ LINUX?
Linux — это клон операционной системы Unix, написанный с нуля Линусом Торвальдсом при помощи неформальной команды хакеров со всего Интернета. Он стремится к соответствию POSIX и Single UNIX Specification.
В нём есть все функции, которые вы ожидаете от современной полноценной Unix, включая настоящую многозадачность, виртуальную память, разделяемые библиотеки, подкачку по требованию, разделяемые исполняемые файлы с копированием при записи, правильное управление памятью и многостековую сеть, включая IPv4 и IPv6.
Он распространяется под лицензией GNU General Public License — более подробную информацию см. в прилагаемом файле COPYING.
НА КАКОМ ОБОРУДОВАНИИ ОН РАБОТАЕТ?
Хотя изначально разработанный для 32-битных ПК на базе x86 (386 или выше), сегодня Linux также работает (как минимум) на архитектурах Compaq Alpha AXP, Sun SPARC и 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 и Renesas M32R.
Linux легко портируется на большинство 32- или 64-битных архитектур общего назначения, если они имеют страничный блок управления памятью (PMMU) и порт компилятора GNU C (gcc) (часть набора компиляторов GNU, GCC). Linux также был портирован на ряд архитектур без PMMU, хотя функциональность в этом случае, очевидно, несколько ограничена. Linux также был портирован сам на себя. Теперь вы можете запустить ядро как пользовательское приложение — это называется UserMode Linux (UML).
ДОКУМЕНТАЦИЯ:
Существует много документации, доступной как в электронном виде в Интернете, так и в книгах, как посвящённой Linux, так и касающейся общих вопросов UNIX. Я рекомендую заглянуть в подкаталоги документации на любом FTP-сайте Linux для книг LDP (Linux Documentation Project). Этот README не предназначен для документации по системе: есть гораздо более качественные источники.
В подкаталоге Documentation/ есть различные файлы README: они обычно содержат связанные с ядром заметки по установке для некоторых драйверов, например. См. Documentation/00-INDEX для списка того, что содержится в каждом файле. Пожалуйста, прочитайте файл Changes, так как он содержит информацию о проблемах, которые могут возникнуть при обновлении вашего ядра.
Подкаталог Documentation/DocBook/ содержит несколько руководств для разработчиков ядра и пользователей. Эти руководства могут быть отображены в различных форматах: PostScript (.ps), PDF, HTML и man-страницы, среди прочих. После установки «make psdocs», «make pdfdocs», «make htmldocs», или «make mandocs» отобразят документацию в запрошенном формате.
УСТАНОВКА исходного кода ядра:
Если вы устанавливаете полные исходники, поместите tarball ядра в каталог, где у вас есть права (например, ваш домашний каталог) и распакуйте его:
xz -cd linux-4.X.tar.xz | tar xvf -
Замените «X» на номер версии последнего ядра.
НЕ ИСПОЛЬЗУЙТЕ область /usr/src/linux! В этой области находится (обычно неполный) набор заголовочных файлов ядра, которые используются библиотечными заголовочными файлами. Они должны соответствовать библиотеке, и не должны быть испорчены тем, каким бы ни было текущее ядро дня.
Вы также можете обновляться между релизами 4.x с помощью патчей. Патчи распространяются в формате xz. Чтобы установить с помощью патча, получите все новые файлы патчей, войдите в верхний каталог исходного кода ядра (linux-4.X) и выполните:
xz -cd ../patch-4.x.xz | patch -p1
Замените «x» для всех версий, больших, чем версия «X» вашего текущего дерева исходников, по порядку, и всё должно быть в порядке. Возможно, вы захотите удалить файлы резервных копий (some-file-name~ или some-file-name.orig) и убедиться, что нет неудавшихся патчей (some-file-name# или some-file-name.rej). Если они есть, то либо вы, либо я допустили ошибку.
В отличие от патчей для ядер 4.x, патчи для ядер 4.x.y (также известных как -stable) не являются инкрементальными, а применяются непосредственно к базовому ядру 4.x. Например, если ваше базовое ядро — 4.0 и вы хотите применить патч 4.0.3, вы не должны сначала применять патчи 4.0.1 и 4.0.2. Аналогично, если вы используете ядро версии 4.0.2 и хотите перейти на 4.0.3, вы должны сначала отменить патч 4.0.2 (т.е. patch -R) перед применением патча 4.0.3. Подробнее об этом можно прочитать в Documentation/applying-patches.txt
Альтернативно, скрипт patch-kernel может быть использован для автоматизации этого процесса. Он определяет текущую версию ядра и применяет все найденные патчи.
linux/scripts/patch-kernel linux
Первый аргумент в команде выше — это расположение исходного кода ядра. Патчи применяются из текущего каталога, но альтернативный каталог может быть указан вторым аргументом.
Убедитесь, что у вас нет устаревших .o файлов и зависимостей:
cd linux make mrproper
Теперь исходники должны быть правильно установлены.
ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ
Компиляция и запуск ядер 4.x требуют актуальных версий различных программных пакетов. Обратитесь к Documentation/Changes для получения минимальных номеров версий и сведений о том, как получить обновления для этих пакетов. Имейте в виду, что использование чрезмерно старых версий этих пакетов может привести к косвенным ошибкам, которые очень трудно отследить, поэтому не предполагайте, что вы можете просто обновить пакеты, когда во время сборки или работы возникают очевидные проблемы.
КАТАЛОГ СБОРКИ для ядра:
При компиляции ядра все выходные файлы по умолчанию будут храниться вместе с исходным кодом ядра. Использование опции «make O=output/dir» позволяет указать альтернативное место для выходных файлов (включая .config). Пример:
исходный код ядра: /usr/src/linux-4.X
каталог сборки: /home/name/build/kernel
Чтобы настроить и собрать ядро, используйте:
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
Пожалуйста, обратите внимание: если используется опция 'O=output/dir', то она должна использоваться для всех вызовов make.
НАСТРОЙКА ядра:
Не пропускайте этот шаг, даже если вы просто обновляете одну минорную версию. В каждом релизе добавляются новые опции конфигурации, и могут возникнуть странные проблемы, если файлы конфигурации не настроены должным образом. Если вы хотите перенести существующую конфигурацию в новую версию с минимальными усилиями, используйте «make oldconfig», который запросит у вас ответы только на новые вопросы.
Альтернативные команды конфигурации:
«make config» Текстовый интерфейс.
«make menuconfig» Текстовые цветные меню, радиосписки и диалоги.
«make nconfig» Улучшенные текстовые цветные меню.
«make xconfig» Инструмент конфигурации на базе X windows (Qt).
«make gconfig» Инструмент конфигурации на базе X windows (Gtk).
«make oldconfig» Ответы по умолчанию на все вопросы на основе содержимого вашего существующего файла ./.config и запрос о новых символах конфигурации.
«make silentoldconfig» Как выше, но избегает загромождения экрана уже отвеченными вопросами. Также обновляет зависимости.
«make olddefconfig» Как выше, но устанавливает новые символы в их значения по умолчанию без запроса.