The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Уязвимости в драйвере к GPU ARM, уже применяемые для соверше..."
Отправлено maxis11, 04-Окт-23 01:13 
Там хуже все, в GPU есть микруха, которая управляет этим самым устройством (в PowerVR это mips, meta и недавно risc-v завезли). На нем запускается прошивка, которая по сути является микро-rtos. Помимо загрузки самой прошивки ещё и передается куча памяти, которая она сама внутри будет управлять (это все на уровне ядра). PCI-e является шиной(да, я кэп) она изоляцию делает на уровне примерно никакой. DMA нужно, чтобы синхронизировать память устройства с RAM памятью (про P2PDMA не говорю). В общем случае у тебя запускается на микрухе блоб, которая находится в PCI-e (в случае дискретной карты), прокидывается туда память (то есть там микруха, которая читает и записывает в/из RAM), и она сама себе работает. Раз уж пошла такая пьянка, то вот ещё история из моего GPU-драйверописания. В случае с закрытым драйвером все ещё хуже (а насколько понял из новости это именно он). Так как они в линуксах не могут использовать большинство API из-за GPL, то обычно они вообще пилят все свою инфраструктуру вместо использования готового (свои аллокаторы, кучи, синхронизации, и.т.д.), склеивают как-то с линуксовым ядром и выносят большую часть функционала в user-space библиотеки (дабы не делиться исходниками). Это все выглядит примерно так: вместо x + y, в программе вызывается ioctl с инициализацией x и y, которое идет в ядро. Модуль ядра берет свой написанный аллокатор поверх alloc_pages возвращает какие-то дескрипторы в структуру (в моем случае ImgTec полностью соблюдали венгерскую аннотацию, из-за чего любое название выглядело как записи чернокнижников). После этого в user-space происходит какая-то проверка и вызывается ioctl с "вызывать операцию для операторов", где ядро уже складывает x + y и возвращает сумму в x. После чего вызывается ioctl для синхронизации x, y. И в ядерном модуле вызывается уже самописные memory barrier'ы на ассемблере (спрятанные по десятком макросов). Потом программа просит ядро экспортировать хэндл x (тоже через ioctl), и наконец выводит сумму. О качестве кода такого драйвера можно догадаться (зато в стиле микроядра).
 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру