В ядре Linux устранена следующая уязвимость:
s390/percpu: исправлена ошибка MVIY_PERCPU() в старых версиях binutils. Зафиксируйте a737737cdb9c ("s390/percpu: инфраструктура для более эффективного
операции this_cpu") представил MVIY_PERCPU(), который преобразует в строку
аргументы, которые уже являются строковыми литералами C. Это создает
Вызов макроса ассемблера с аргументами в кавычках, разделенных пробелами:
GEN_MVIY "459712" "%r3"
В версиях GNU до binutils 2.39 разделительные пробелы удаляются.
между аргументами макроса в кавычках во время очистки ввода.
Они
следовательно, анализируйте вызов как один аргумент и выдавайте
повторные предупреждения:
Предупреждение: отсутствует закрытие `"'
Файл .ifc в GEN_MVIY никогда не совпадает, и GNU успешно завершает работу.
без выполнения инструкции mviy. В результате прерванное
Последовательность каждого процессора не помечается в lowcore и возвращается исключение
path не может восстановить регистр адресов каждого процессора после миграции. Все вызывающие функции MVIY_PERCPU() передают строковые литералы C.
Используйте их напрямую
и разделяйте аргументы макроса ассемблера явной запятой.
результирующий вызов:
GEN_MVIY 459712, %r3
Эта форма однозначна для интегрированного ассемблера GNU as и LLVM. Такое поведение было исправлено в GNU, начиная с binutils 2.39, но в Linux
поддерживает binutils 2.30.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: s390/percpu: Fix MVIY_PERCPU() with older binutils Commit a737737cdb9c ("s390/percpu: Infrastructure for more efficient this_cpu operations") introduced MVIY_PERCPU(), which stringifies arguments that are already C string literals. This generates an assembler macro invocation with whitespace-separated quoted arguments: GEN_MVIY "459712" "%r3" GNU as versions prior to binutils 2.39 drop the separating whitespace between quoted macro arguments during input scrubbing. They consequently parse the invocation as a single argument and emit repeated warnings: Warning: missing closing `"' The .ifc in GEN_MVIY never matches and GNU as exits successfully without emitting the mviy instruction. As a result, the interrupted per-CPU sequence is not marked in lowcore and the exception return path cannot repair the per-CPU address register after migration. All MVIY_PERCPU() callers pass C string literals. Use them directly and separate the assembler macro arguments with an explicit comma. The resulting invocation is: GEN_MVIY 459712, %r3 This form is unambiguous for GNU as and LLVM's integrated assembler. This behavior was fixed in GNU as from binutils 2.39, but Linux supports binutils 2.30.
Характеристики атаки
Последствия
Строка CVSS v3.1