]> Git Repo - linux.git/commitdiff
xen/pvcalls: free active map buffer on pvcalls_front_free_map
authorOleksii Moisieiev <[email protected]>
Tue, 20 Dec 2022 14:50:13 +0000 (14:50 +0000)
committerJuergen Gross <[email protected]>
Mon, 9 Jan 2023 07:05:20 +0000 (08:05 +0100)
Data buffer for active map is allocated in alloc_active_ring and freed
in free_active_ring function, which is used only for the error
cleanup. pvcalls_front_release is calling pvcalls_front_free_map which
ends foreign access for this buffer, but doesn't free allocated pages.
Call free_active_ring to clean all allocated resources.

Signed-off-by: Oleksii Moisieiev <[email protected]>
Reviewed-by: Stefano Stabellini <[email protected]>
Link: https://lore.kernel.org/r/6a762ee32dd655cbb09a4aa0e2307e8919761311.1671531297.git.oleksii_moisieiev@epam.com
Signed-off-by: Juergen Gross <[email protected]>
drivers/xen/pvcalls-front.c

index 5328f4d35f25eee8dcc5d8207f2d5254bbfd38b9..d5d589bda243d4c8c45c24e82bde513a5c750ca3 100644 (file)
@@ -225,6 +225,8 @@ again:
        return IRQ_HANDLED;
 }
 
+static void free_active_ring(struct sock_mapping *map);
+
 static void pvcalls_front_free_map(struct pvcalls_bedata *bedata,
                                   struct sock_mapping *map)
 {
@@ -240,7 +242,7 @@ static void pvcalls_front_free_map(struct pvcalls_bedata *bedata,
        for (i = 0; i < (1 << PVCALLS_RING_ORDER); i++)
                gnttab_end_foreign_access(map->active.ring->ref[i], NULL);
        gnttab_end_foreign_access(map->active.ref, NULL);
-       free_page((unsigned long)map->active.ring);
+       free_active_ring(map);
 
        kfree(map);
 }
This page took 0.058919 seconds and 4 git commands to generate.