Bug 228907 - VMCI driver: During datagram dispatch if there's no source context then use the current context.
Summary: VMCI driver: During datagram dispatch if there's no source context then use t...
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: CURRENT
Hardware: Any Any
: --- Affects Some People
Assignee: Mark Peek
URL:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2018-06-11 23:31 UTC by vdasahar
Modified: 2018-06-12 21:14 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description vdasahar 2018-06-11 23:31:03 UTC
When dispatching a VMCI datagram, if no source context is provided we must use the current context. Also, it's better to use VMCI_MEMORY_ATOMIC i.e, M_NOWAIT for memory allocation in datagram_create_hnd. Could you please help get this patch in?

--- a/freebsd_driver/src/vmci_datagram.c
+++ b/freebsd_driver/src/vmci_datagram.c
@@ -160,7 +160,7 @@ datagram_create_hnd(vmci_id resource_id, uint32_t flags,
                handle = VMCI_MAKE_HANDLE(context_id, resource_id);
        }

-       entry = vmci_alloc_kernel_mem(sizeof(*entry), VMCI_MEMORY_NORMAL);
+       entry = vmci_alloc_kernel_mem(sizeof(*entry), VMCI_MEMORY_ATOMIC);
        if (entry == NULL) {
                VMCI_LOG_WARNING(LGPFX"Failed allocating memory for datagram "
                    "entry.\n");
@@ -457,7 +457,7 @@ vmci_datagram_dispatch_as_guest(struct vmci_datagram *dg)

        resource = vmci_resource_get(dg->src, VMCI_RESOURCE_TYPE_DATAGRAM);
        if (NULL == resource)
-               return VMCI_ERROR_NO_HANDLE;
+               return (VMCI_ERROR_NO_HANDLE);

        retval = vmci_send_datagram(dg);
        vmci_resource_release(resource);
@@ -495,6 +495,10 @@ vmci_datagram_dispatch(vmci_id context_id, struct vmci_datagram *dg)
                return (VMCI_ERROR_INVALID_ARGS);
        }

+       /* If no source context then use the current context. */
+       if (VMCI_INVALID_ID == dg->src.context)
+               dg->src.context = vmci_get_context_id();
+
        return (vmci_datagram_dispatch_as_guest(dg));
 }
Comment 1 vdasahar 2018-06-11 23:33:57 UTC
Mark, could you please help with this? Thanks in advance.