]> Git Repo - J-linux.git/commitdiff
hv_netvsc: Don't free decrypted memory
authorRick Edgecombe <[email protected]>
Mon, 11 Mar 2024 16:15:56 +0000 (09:15 -0700)
committerWei Liu <[email protected]>
Wed, 10 Apr 2024 21:33:32 +0000 (21:33 +0000)
In CoCo VMs it is possible for the untrusted host to cause
set_memory_encrypted() or set_memory_decrypted() to fail such that an
error is returned and the resulting memory is shared. Callers need to
take care to handle these errors to avoid returning decrypted (shared)
memory to the page allocator, which could lead to functional or security
issues.

The netvsc driver could free decrypted/shared pages if
set_memory_decrypted() fails. Check the decrypted field in the gpadl
to decide whether to free the memory.

Signed-off-by: Rick Edgecombe <[email protected]>
Signed-off-by: Michael Kelley <[email protected]>
Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]>
Acked-by: Kirill A. Shutemov <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Wei Liu <[email protected]>
Message-ID: <20240311161558[email protected]>

drivers/net/hyperv/netvsc.c

index a6fcbda64ecc60e5beccf20f2043ab00870cbd5d..2b6ec979a62f2160a7187e024a4b0dc6bf9e08da 100644 (file)
@@ -154,8 +154,11 @@ static void free_netvsc_device(struct rcu_head *head)
        int i;
 
        kfree(nvdev->extension);
-       vfree(nvdev->recv_buf);
-       vfree(nvdev->send_buf);
+
+       if (!nvdev->recv_buf_gpadl_handle.decrypted)
+               vfree(nvdev->recv_buf);
+       if (!nvdev->send_buf_gpadl_handle.decrypted)
+               vfree(nvdev->send_buf);
        bitmap_free(nvdev->send_section_map);
 
        for (i = 0; i < VRSS_CHANNEL_MAX; i++) {
This page took 0.063446 seconds and 4 git commands to generate.