diff options
author | Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> | 2022-10-05 20:48:22 +0300 |
---|---|---|
committer | Juergen Gross <jgross@suse.com> | 2022-10-06 08:30:10 +0200 |
commit | e433715b116553892ecad8796018ae4b64304252 (patch) | |
tree | 3d8c3bdd5cf6febdb50de5b755b30177eb0b0295 | |
parent | 06c62f8cbb1f660a4147b0d8cbe65cf2cfc1aa5a (diff) | |
download | linux-e433715b116553892ecad8796018ae4b64304252.tar.gz linux-e433715b116553892ecad8796018ae4b64304252.tar.bz2 linux-e433715b116553892ecad8796018ae4b64304252.zip |
xen/virtio: Fix n_pages calculation in xen_grant_dma_map(unmap)_page()
Take page offset into the account when calculating the number of pages
to be granted.
Fixes: d6aca3504c7d ("xen/grant-dma-ops: Add option to restrict memory access under Xen")
Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Juergen Gross <jgross@suse.com>
Link: https://lore.kernel.org/r/20221005174823.1800761-2-olekstysh@gmail.com
Signed-off-by: Juergen Gross <jgross@suse.com>
-rw-r--r-- | drivers/xen/grant-dma-ops.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/xen/grant-dma-ops.c b/drivers/xen/grant-dma-ops.c index 8973fc1e9ccc..1998d0e8ce82 100644 --- a/drivers/xen/grant-dma-ops.c +++ b/drivers/xen/grant-dma-ops.c @@ -153,7 +153,7 @@ static dma_addr_t xen_grant_dma_map_page(struct device *dev, struct page *page, unsigned long attrs) { struct xen_grant_dma_data *data; - unsigned int i, n_pages = PFN_UP(size); + unsigned int i, n_pages = PFN_UP(offset + size); grant_ref_t grant; dma_addr_t dma_handle; @@ -185,7 +185,8 @@ static void xen_grant_dma_unmap_page(struct device *dev, dma_addr_t dma_handle, unsigned long attrs) { struct xen_grant_dma_data *data; - unsigned int i, n_pages = PFN_UP(size); + unsigned long offset = dma_handle & (PAGE_SIZE - 1); + unsigned int i, n_pages = PFN_UP(offset + size); grant_ref_t grant; if (WARN_ON(dir == DMA_NONE)) |