[PATCH] gnttab: adjust unmap checking of dev_bus_addr

Jan Beulich posted 1 patch 2 years, 7 months ago
Failed in applying to current master (apply log)
[PATCH] gnttab: adjust unmap checking of dev_bus_addr
Posted by Jan Beulich 2 years, 7 months ago
There's no point checking ->dev_bus_addr when GNTMAP_device_map isn't
set (and hence the field isn't going to be consumed). And if there is a
mismatch, use the so far unused GNTST_bad_dev_addr error indicator - if
not here, where else would this (so far unused) value be used?

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -1450,9 +1450,9 @@ unmap_common(
 
     op->mfn = act->mfn;
 
-    if ( op->dev_bus_addr &&
+    if ( op->dev_bus_addr && (flags & GNTMAP_device_map) &&
          unlikely(op->dev_bus_addr != mfn_to_maddr(act->mfn)) )
-        PIN_FAIL(act_release_out, GNTST_general_error,
+        PIN_FAIL(act_release_out, GNTST_bad_dev_addr,
                  "Bus address doesn't match gntref (%"PRIx64" != %"PRIpaddr")\n",
                  op->dev_bus_addr, mfn_to_maddr(act->mfn));
 


Re: [PATCH] gnttab: adjust unmap checking of dev_bus_addr
Posted by Julien Grall 2 years, 7 months ago
Hi Jan,

On 30/08/2021 15:26, Jan Beulich wrote:
> There's no point checking ->dev_bus_addr when GNTMAP_device_map isn't
> set (and hence the field isn't going to be consumed). And if there is a
> mismatch, use the so far unused GNTST_bad_dev_addr error indicator - if
> not here, where else would this (so far unused) value be used?
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>

Acked-by: Julien Grall <jgrall@amazon.com>

> 
> --- a/xen/common/grant_table.c
> +++ b/xen/common/grant_table.c
> @@ -1450,9 +1450,9 @@ unmap_common(
>   
>       op->mfn = act->mfn;
>   
> -    if ( op->dev_bus_addr &&
> +    if ( op->dev_bus_addr && (flags & GNTMAP_device_map) &&
>            unlikely(op->dev_bus_addr != mfn_to_maddr(act->mfn)) )
> -        PIN_FAIL(act_release_out, GNTST_general_error,
> +        PIN_FAIL(act_release_out, GNTST_bad_dev_addr,
>                    "Bus address doesn't match gntref (%"PRIx64" != %"PRIpaddr")\n",
>                    op->dev_bus_addr, mfn_to_maddr(act->mfn));
>   
> 

Cheers,

-- 
Julien Grall