[PATCH] drm/amd/amdgpu: Fix iova debugfs for non-iommu case

Tom St Denis tom.stdenis at amd.com
Tue Sep 19 17:37:12 UTC 2017


As I predicted ...

[root at carrizo ~]# xxd -l 1024 -s 0xC0000 
/sys/kernel/debug/dri/0/amdgpu_iova
000c0000: 55aa 74e9 a902 0000 0000 0000 0000 0000  U.t.............
000c0010: 0000 0000 0000 0000 4c02 0000 0000 4942  ........L.....IB
000c0020: 4daa 2e93 0000 0000 0000 0000 0000 0004  M...............
000c0030: 2037 3631 3239 3535 3230 0000 0000 0000   761295520......
000c0040: a102 0000 0000 0000 2802 0000 0000 0000  ........(.......
000c0050: 3037 2f32 372f 3136 2030 343a 3036 0000  07/27/16 04:06..
000c0060: 3600 0000 e9b4 0300 e9c3 0300 0000 f400  6...............
000c0070: 0013 0000 00d0 0100 1a16 20e1 0280 7e00  .......... ...~.
000c0080: a200 4402 1200 0000 0000 003c 400e 0207  ..D........<@...
000c0090: 3c01 1a00 0400 0000 eea0 ff06 0008 3040  <.............0@
000c00a0: 0e01 0000 0000 0000 1403 0000 0000 0000  ................
000c00b0: be7e 1100 b907 1ad6 502c 0000 0000 0000  .~......P,......
000c00c0: 0000 0000 1440 4143 0000 0000 1000 0000  ..... at AC........
000c00d0: 4200 0000 407c 0600 2000 2000 1200 0e00  B...@|.. . .....
000c00e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000c00f0: 0000 0000 3131 332d 4339 3534 3031 3031  ....113-C9540101
000c0100: 2d30 3036 0046 474c 2045 4c4c 4553 4d45  -006.FGL ELLESME
000c0110: 5245 0050 4349 5f45 5850 5245 5353 0047  RE.PCI_EXPRESS.G
000c0120: 4444 5235 000d 0a43 3935 3420 506f 6c61  DDR5...C954 Pola
000c0130: 7269 7331 3020 474c 2041 3120 4744 4452  ris10 GL A1 GDDR
000c0140: 3520 3235 364d 7833 3220 3847 4220 3330  5 256Mx32 8GB 30
000c0150: 3065 2f33 3030 6d20 2020 2020 2020 2020  0e/300m
000c0160: 2020 2020 2020 2020 2020 2020 2020 2020
000c0170: 2020 200d 0a00 0d0a 200d 0a00 2843 2920     ..... ...(C)
000c0180: 3139 3838 2d32 3031 302c 2041 6476 616e  1988-2010, Advan
000c0190: 6365 6420 4d69 6372 6f20 4465 7669 6365  ced Micro Device
000c01a0: 732c 2049 6e63 2e00 4154 4f4d 4249 4f53  s, Inc..ATOMBIOS
000c01b0: 424b 2d41 4d44 2056 4552 3031 352e 3035  BK-AMD VER015.05
000c01c0: 302e 3030 302e 3030 302e 3030 3730 3036  0.000.000.007006
000c01d0: 0043 3935 3430 3130 312e 3030 3600 3132  .C9540101.006.12
000c01e0: 3935 3838 3720 0033 3534 3731 3220 2000  95887 .354712  .
000c01f0: 2020 2020 2020 2020 0041 4d44 5f45 4c4c          .AMD_ELL
000c0200: 4553 4d45 5245 5f43 3935 3430 315f 5854  ESMERE_C95401_XT
000c0210: 5f41 315f 4744 355f 3847 425c 636f 6e66  _A1_GD5_8GB\conf
000c0220: 6967 2e68 0000 0090 2400 0101 4154 4f4d  ig.h....$...ATOM

I can dump arbitrary system memory with the iommu enabled in the bios 
via my carrizo "dev" in the debugfs entry.

So if the issue is arbitrary access is a no no (and I don't get why) 
then the entire patch is a NAK because clearly I can "abuse" it.

Tom

On 19/09/17 01:26 PM, Tom St Denis wrote:
> On 19/09/17 01:23 PM, Christian König wrote:
>> Am 19.09.2017 um 19:20 schrieb Tom St Denis:
>>> On 19/09/17 01:18 PM, Christian König wrote:
>>>> Am 19.09.2017 um 19:14 schrieb Tom St Denis:
>>>>> On 19/09/17 01:10 PM, Christian König wrote:
>>>>>> As far as I know we don't need #ifdefs cause there are dummy 
>>>>>> functions when IOMMU is not compiled in.
>>>>>>
>>>>>> But this patch is a NAK since it circumvents the /dev/mem 
>>>>>> restriction when IOMMU is disabled and that is not something we 
>>>>>> can easily allow.
>>>>>
>>>>> I raised this objection 24 hours ago and was told to go ahead with 
>>>>> the read/write methods anyways.
>>>>>
>>>>> Short of making a list of mappings/allocations in the ttm layer I 
>>>>> have no idea how we would track this in the non-iommu case which 
>>>>> means the entire iova debugfs entry should have been NAK'ed in the 
>>>>> first place.
>>>>>
>>>>> I'm open to suggestions.
>>>>
>>>> As long as IOMMU is enabled the entry is perfectly fine, cause only 
>>>> memory mapped to the IOMMU is accessible to the GPU and so 
>>>> accessible using the debugfs entry as well.
>>>
>>> On devices where there's no translation (e.g. Carrizo) does the iommu 
>>> layer track mappings?  I'm wondering if on those I could seek outside 
>>> of boundaries and read system memory anyways.
>>
>> Why do you think there isn't any translation on CZ? I mean the whole 
>> ATC thing uses the IOMMU (v2 in this case) on APUs.
> 
> On my Carrizo devel system (A12-9800) the GPU dma addresses are physical 
> addresses.  I only first saw iommu with APUs enabled on Raven.
> 
> I'll see if I can read non-mapped pages via the iova file on my Carrizo.
> 
>>>> Only when IOMMU is disabled we can't go this way cause we can't know 
>>>> which memory is mapped to the driver and which isn't (or could we 
>>>> somehow track this?).
>>>>
>>>> I suggest to not create the file in the first place if IOMMU is 
>>>> disabled.
>>>
>>> I could easily do this (basically check if the domain is not null at 
>>> debugfs init time).
>>
>> Yeah, please do this for now.
>>
>> I mean it would be great to have this interface even with IOMMU 
>> disabled, but of hand I can't think of a way to allow this.
> 
> Sent to the list already.  Tested with enabled/disabled.  Seems to work 
> for me.
> 
> Tom
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx



More information about the amd-gfx mailing list