|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 7/7] xen/arm: mm: Flush the TLBs even if a mapping failed in create_xen_entries
On Wed, 8 May 2019, Julien Grall wrote:
> At the moment, create_xen_entries will only flush the TLBs if the full
> range has successfully been updated. This may lead to leave unwanted
> entries in the TLBs if we fail to update some entries.
>
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
> Reviewed-by: Andrii Anisov <andrii_anisov@xxxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> Changes in v2:
> - Add Andrii's reviewed-by
> ---
> xen/arch/arm/mm.c | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
> index 8ee828d445..9d584e4cbf 100644
> --- a/xen/arch/arm/mm.c
> +++ b/xen/arch/arm/mm.c
> @@ -984,7 +984,7 @@ static int create_xen_entries(enum xenmap_operation op,
> unsigned long nr_mfns,
> unsigned int flags)
> {
> - int rc;
> + int rc = 0;
> unsigned long addr = virt, addr_end = addr + nr_mfns * PAGE_SIZE;
> lpae_t pte, *entry;
> lpae_t *third = NULL;
> @@ -1013,7 +1013,8 @@ static int create_xen_entries(enum xenmap_operation op,
> {
> printk("%s: trying to replace an existing mapping
> addr=%lx mfn=%"PRI_mfn"\n",
> __func__, addr, mfn_x(mfn));
> - return -EINVAL;
> + rc = -EINVAL;
> + goto out;
> }
> if ( op == RESERVE )
> break;
> @@ -1030,7 +1031,8 @@ static int create_xen_entries(enum xenmap_operation op,
> {
> printk("%s: trying to %s a non-existing mapping
> addr=%lx\n",
> __func__, op == REMOVE ? "remove" : "modify",
> addr);
> - return -EINVAL;
> + rc = -EINVAL;
> + goto out;
> }
> if ( op == REMOVE )
> pte.bits = 0;
> @@ -1043,7 +1045,8 @@ static int create_xen_entries(enum xenmap_operation op,
> {
> printk("%s: Incorrect combination for addr=%lx\n",
> __func__, addr);
> - return -EINVAL;
> + rc = -EINVAL;
> + goto out;
> }
> }
> write_pte(entry, pte);
> @@ -1052,11 +1055,14 @@ static int create_xen_entries(enum xenmap_operation
> op,
> BUG();
> }
> }
> +out:
> + /*
> + * Flush the TLBs even in case of failure because we may have
> + * partially modified the PT. This will prevent any unexpected
> + * behavior afterwards.
> + */
> flush_xen_tlb_range_va(virt, PAGE_SIZE * nr_mfns);
>
> - rc = 0;
> -
> -out:
> return rc;
> }
>
> --
> 2.11.0
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |