OSLL / ntb-cxl

NTB/CXL Bridge
MIT License
4 stars 0 forks source link

Проверка доступа к RAM через qemu устройство #64

Closed mirrin00 closed 1 year ago

AndrewGavril commented 1 year ago

Проверить, как соответствуют адреса в qemu-процессе (смапленой памяти в shared mem) относительно адресов виртуальной машины.

Результат: драйвер в виртуальной машине, который пишет в DMA память (адреса DMA памяти должны быть физическими относительно 0 адреса) определенную информацию и печатает адрес этой памяти. На хосте нужно проверить, что начало shared mem памяти + offset (адрес, полученный из модуля ядра) даст указатель на туже саму информацию.

AndrewGavril commented 1 year ago

Для проверки лучше модифицировать ntb_hw_idt модуль, и начать разбираться с выделением mw.

Есть 2 типа окон: 1) DMA и 2) по таблице адресов LUT

2 случай сложен, поэтому лучше сконфигурировать 1 окно и попробовать оперделить его адрес. Затем проверить гипотезу о том, что этот адрес физический.

mxkrsv commented 1 year ago

https://docs.kernel.org/core-api/dma-api-howto.html

AndrewGavril commented 1 year ago

Согласно доке: https://www.renesas.com/eu/en/document/mah/89hpes32nt24bg2-device-user-manual (Раздел TLP Translation)

Любой адрес окна вычисляется относительно конкретного BAR, который в свою очередь имеет физический адрес (можно проверить посмотрев вызовы при аллокации BAR: https://elixir.bootlin.com/linux/latest/source/drivers/ntb/hw/idt/ntb_hw_idt.c#L2637)

Физический адрес маппится в виртуальную память. Поэтому нужно взять BAR адрес и получить смещение с помощью: https://elixir.bootlin.com/linux/latest/source/drivers/ntb/hw/idt/ntb_hw_idt.c#L1194

mxkrsv commented 1 year ago

In the blogpost reffered to in #65, that hypothesis is checked via direct memory writes. Accordingly to that, all in-VM physical addresses match the offsets in the shared memory.

AndrewGavril commented 1 year ago

ok

In the blogpost reffered to in #65, that hypothesis is checked via direct memory writes. Accordingly to that, all in-VM physical addresses match the offsets in the shared memory.

But we need the matching of window addresses in the idt module. You need to check the same thing, but based on the data that the idt driver has

mirrin00 commented 1 year ago

https://elixir.bootlin.com/linux/latest/source/drivers/ntb/hw/idt/ntb_hw_idt.c#L1287

mirrin00 commented 1 year ago

Here in lines 1319 and 1320, the address is written to device mapping table: https://elixir.bootlin.com/linux/latest/source/drivers/ntb/hw/idt/ntb_hw_idt.c#L1319