В ядре Linux устранена следующая уязвимость:
pinctrl: spacemit: исправлена проверка NULL в spacemit_pin_set_config
spacemit_pin_set_config() ищет дескриптор каждого контакта с помощью
spacemit_get_pin() затем проверяет неверную переменную на наличие ошибки:
const struct spacemit_pin *spin = spacemit_get_pin(pctrl, pin);
...
если (!pin)
вернуть -ЭИНВАЛ;
reg = spacemit_pin_to_reg(pctrl, spin->pin);
pin — это беззнаковый идентификатор вывода int, где 0 (GPIO_0 / gmac0_rxdv на K3) — это
действительный PIN-код, поэтому отклонение его здесь приводит к потере записи конфигурации PAD в первую очередь.
контакт каждой группы. На K3 Pico-ITX группа GMAC RGMII указывает контакт 0 как
его первая запись, поэтому его конфигурация силы привода / смещения была молчаливо
игнорируется. Предполагаемая защита состоит в том, чтобы spacemit_get_pin() возвращал NULL, когда
Идентификатор контакта отсутствует в таблице контактов SoC.
Вместо этого проверьте вращение, что оба
восстанавливает настройку PAD для вывода 0 и предотвращает разыменование NULL на выводе spin->pin.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: pinctrl: spacemit: fix NULL check in spacemit_pin_set_config spacemit_pin_set_config() looks up the per-pin descriptor with spacemit_get_pin() then checks the wrong variable for failure: const struct spacemit_pin *spin = spacemit_get_pin(pctrl, pin); ... if (!pin) return -EINVAL; reg = spacemit_pin_to_reg(pctrl, spin->pin); pin is an unsigned int pin id, where 0 (GPIO_0 / gmac0_rxdv on K3) is a valid pin, so rejecting it here drops the PAD config write for the first pin of every group. On K3 Pico-ITX the GMAC RGMII group lists pin 0 as its first entry, so its drive-strength / bias configuration was silently ignored. The intended guard is against spacemit_get_pin() returning NULL when the pin id isn't in the SoC's pin table. Check spin instead, which both restores PAD setup for pin 0 and prevents a NULL deref on spin->pin.