
Исходный код ядра Linux 4.1.15 с изменениями, связанными с CVE-2017-1000371, уязвимостью локального повышения привилегий. Предоставляет основу для анализа и понимания дефекта.
Релиз ядра 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 (также известных как стабильные ядра) не являются инкрементальными, а применяются непосредственно к базовому ядру 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" Как указано выше, но устанавливает новые символы в их значения по умолчанию без запроса.
"make defconfig" Создать файл ./.config, используя значения символов по умолчанию из arch/$ARCH/defconfig или arch/$ARCH/configs/${PLATFORM}_defconfig, в зависимости от архитектуры.