lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 11 Nov 2016 14:44:29 +0000
From:   Robin Murphy <robin.murphy@....com>
To:     Laurent Pinchart <laurent.pinchart@...asonboard.com>
Cc:     Magnus Damm <magnus.damm@...il.com>,
        iommu@...ts.linux-foundation.org,
        laurent.pinchart+renesas@...asonboard.com, geert+renesas@...der.be,
        joro@...tes.org, linux-kernel@...r.kernel.org,
        linux-renesas-soc@...r.kernel.org, horms+renesas@...ge.net.au,
        m.szyprowski@...sung.com
Subject: Re: [PATCH v6 05/07] iommu/ipmmu-vmsa: Add new IOMMU_DOMAIN_DMA ops

Hi Laurent,

On 11/11/16 01:50, Laurent Pinchart wrote:
> Hi Robin,
> 
> On Friday 21 Oct 2016 18:52:53 Robin Murphy wrote:
>> On 20/10/16 00:36, Magnus Damm wrote:
>>> From: Magnus Damm <damm+renesas@...nsource.se>
>>>
>>> Introduce an alternative set of iommu_ops suitable for 64-bit ARM
>>> as well as 32-bit ARM when CONFIG_IOMMU_DMA=y. Also adjust the
>>> Kconfig to depend on ARM or IOMMU_DMA.
>>>
>>> Signed-off-by: Magnus Damm <damm+renesas@...nsource.se>
>>> ---
>>>
>>>  Changes since V5:
>>>  - Made domain allocation/free code more consistent - thanks Joerg!
>>>  
>>>  Changes since V4:
>>>  - Added Kconfig hunk to depend on ARM or IOMMU_DMA
>>>  
>>>  Changes since V3:
>>>  - Removed group parameter from ipmmu_init_platform_device()
>>>  
>>>  Changes since V2:
>>>  
>>>  - Included this new patch from the following series:
>>>    [PATCH 00/04] iommu/ipmmu-vmsa: IPMMU CONFIG_IOMMU_DMA update
>>>  
>>>  - Use only a single iommu_ops structure with #ifdef CONFIG_IOMMU_DMA
>>>  - Folded in #ifdefs to handle CONFIG_ARM and CONFIG_IOMMU_DMA
>>>  - of_xlate() is now used without #ifdefs
>>>  - Made sure code compiles on both 32-bit and 64-bit ARM.
>>>  
>>>  drivers/iommu/Kconfig      |    1
>>>  drivers/iommu/ipmmu-vmsa.c |  122 ++++++++++++++++++++++++++++++++++++---
>>>  2 files changed, 115 insertions(+), 8 deletions(-)
> 
> [snip]
> 
>>> --- 0006/drivers/iommu/ipmmu-vmsa.c
>>> +++ work/drivers/iommu/ipmmu-vmsa.c	2016-10-20 08:16:48.440607110 +0900
> 
> [snip]
> 
>>> -static struct iommu_domain *ipmmu_domain_alloc(unsigned type)
>>> -{
>>> -	if (type != IOMMU_DOMAIN_UNMANAGED)
>>> -		return NULL;
>>
>> I *think* that if we did the initial check thus:
>>
>> 	if (type != IOMMU_DOMAIN_UNMANAGED ||
>> 	    (IS_ENABLED(CONFIG_IOMMU_DMA) && type != IOMMU_DOMAIN_DMA))
>> 		return NULL;
> 
> I assume you meant
> 
>  	if (type != IOMMU_DOMAIN_UNMANAGED &&
>  	    (!IS_ENABLED(CONFIG_IOMMU_DMA) || type != IOMMU_DOMAIN_DMA))
>  		return NULL;
> 
> But how about just
> 
>  	if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA))
>  		return NULL;
> 
> as type will never be set to IOMMU_DOMAIN_DMA on ARM32 ?

Actually it can be, but *only* at this point, because
iommu_group_get_for_dev() will always attempt to allocate a default
domain. Having the additional check up-front just saves going through
the whole IOVA domain allocation only to tear it all down again when
get_cookie() returns -ENODEV. You're right that it's not strictly
necessary (and that I got my DeMorganning wrong), though.

Robin.

>> it shouldn't be necessary to split the function at all - we then just
>> wrap the {get,put}_cookie() bits in "if (type ==  IOMMU_DOMAIN_DMA)" and
>> in the 32-bit ARM case they just don't run as that can never be true.
>>
>>> -
>>> -	return __ipmmu_domain_alloc(type);
>>> -}
>>> -
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ