Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F146154468
D41001.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D41001.id.diff
View Options
diff --git a/lib/libvmmapi/amd64/vmmapi_machdep.c b/lib/libvmmapi/amd64/vmmapi_machdep.c
--- a/lib/libvmmapi/amd64/vmmapi_machdep.c
+++ b/lib/libvmmapi/amd64/vmmapi_machdep.c
@@ -31,6 +31,8 @@
#include <machine/specialreg.h>
#include <machine/vmm.h>
+#include <machine/vmm_dev.h>
+#include <machine/vmm_snapshot.h>
#include <string.h>
@@ -52,6 +54,38 @@
[VM_CAP_MAX] = NULL,
};
+#define VM_MD_IOCTLS \
+ VM_SET_SEGMENT_DESCRIPTOR, \
+ VM_GET_SEGMENT_DESCRIPTOR, \
+ VM_SET_KERNEMU_DEV, \
+ VM_GET_KERNEMU_DEV, \
+ VM_LAPIC_IRQ, \
+ VM_LAPIC_LOCAL_IRQ, \
+ VM_LAPIC_MSI, \
+ VM_IOAPIC_ASSERT_IRQ, \
+ VM_IOAPIC_DEASSERT_IRQ, \
+ VM_IOAPIC_PULSE_IRQ, \
+ VM_IOAPIC_PINCOUNT, \
+ VM_ISA_ASSERT_IRQ, \
+ VM_ISA_DEASSERT_IRQ, \
+ VM_ISA_PULSE_IRQ, \
+ VM_ISA_SET_IRQ_TRIGGER, \
+ VM_INJECT_NMI, \
+ VM_SET_X2APIC_STATE, \
+ VM_GET_X2APIC_STATE, \
+ VM_GET_HPET_CAPABILITIES, \
+ VM_RTC_WRITE, \
+ VM_RTC_READ, \
+ VM_RTC_SETTIME, \
+ VM_RTC_GETTIME
+
+const cap_ioctl_t vm_ioctl_cmds[] = {
+ VM_COMMON_IOCTLS,
+ VM_PPT_IOCTLS,
+ VM_MD_IOCTLS,
+};
+size_t vm_ioctl_ncmds = nitems(vm_ioctl_cmds);
+
int
vm_set_desc(struct vcpu *vcpu, int reg,
uint64_t base, uint32_t limit, uint32_t access)
diff --git a/lib/libvmmapi/internal.h b/lib/libvmmapi/internal.h
--- a/lib/libvmmapi/internal.h
+++ b/lib/libvmmapi/internal.h
@@ -7,6 +7,8 @@
#ifndef __VMMAPI_INTERNAL_H__
#define __VMMAPI_INTERNAL_H__
+#include <sys/types.h>
+
struct vmctx {
int fd;
uint32_t lowmem_limit;
@@ -26,4 +28,50 @@
extern const char *vm_capstrmap[];
+#define VM_COMMON_IOCTLS \
+ VM_RUN, \
+ VM_SUSPEND, \
+ VM_REINIT, \
+ VM_ALLOC_MEMSEG, \
+ VM_GET_MEMSEG, \
+ VM_MMAP_MEMSEG, \
+ VM_MMAP_MEMSEG, \
+ VM_MMAP_GETNEXT, \
+ VM_MUNMAP_MEMSEG, \
+ VM_SET_REGISTER, \
+ VM_GET_REGISTER, \
+ VM_SET_REGISTER_SET, \
+ VM_GET_REGISTER_SET, \
+ VM_INJECT_EXCEPTION, \
+ VM_SET_CAPABILITY, \
+ VM_GET_CAPABILITY, \
+ VM_STATS, \
+ VM_STAT_DESC, \
+ VM_GET_GPA_PMAP, \
+ VM_GLA2GPA, \
+ VM_GLA2GPA_NOFAULT, \
+ VM_ACTIVATE_CPU, \
+ VM_GET_CPUS, \
+ VM_SUSPEND_CPU, \
+ VM_RESUME_CPU, \
+ VM_SET_INTINFO, \
+ VM_GET_INTINFO, \
+ VM_RESTART_INSTRUCTION, \
+ VM_SET_TOPOLOGY, \
+ VM_GET_TOPOLOGY, \
+ VM_SNAPSHOT_REQ, \
+ VM_RESTORE_TIME
+
+#define VM_PPT_IOCTLS \
+ VM_BIND_PPTDEV, \
+ VM_UNBIND_PPTDEV, \
+ VM_MAP_PPTDEV_MMIO, \
+ VM_PPTDEV_MSI, \
+ VM_PPTDEV_MSIX, \
+ VM_UNMAP_PPTDEV_MMIO, \
+ VM_PPTDEV_DISABLE_MSIX
+
+extern const cap_ioctl_t vm_ioctl_cmds[];
+extern size_t vm_ioctl_ncmds;
+
#endif /* !__VMMAPI_INTERNAL_H__ */
diff --git a/lib/libvmmapi/vmmapi.c b/lib/libvmmapi/vmmapi.c
--- a/lib/libvmmapi/vmmapi.c
+++ b/lib/libvmmapi/vmmapi.c
@@ -1351,42 +1351,15 @@
return (error);
}
-/* Keep in sync with machine/vmm_dev.h. */
-static const cap_ioctl_t vm_ioctl_cmds[] = { VM_RUN, VM_SUSPEND, VM_REINIT,
- VM_ALLOC_MEMSEG, VM_GET_MEMSEG, VM_MMAP_MEMSEG, VM_MMAP_MEMSEG,
- VM_MMAP_GETNEXT, VM_MUNMAP_MEMSEG, VM_SET_REGISTER, VM_GET_REGISTER,
- VM_SET_SEGMENT_DESCRIPTOR, VM_GET_SEGMENT_DESCRIPTOR,
- VM_SET_REGISTER_SET, VM_GET_REGISTER_SET,
- VM_SET_KERNEMU_DEV, VM_GET_KERNEMU_DEV,
- VM_INJECT_EXCEPTION, VM_LAPIC_IRQ, VM_LAPIC_LOCAL_IRQ,
- VM_LAPIC_MSI, VM_IOAPIC_ASSERT_IRQ, VM_IOAPIC_DEASSERT_IRQ,
- VM_IOAPIC_PULSE_IRQ, VM_IOAPIC_PINCOUNT, VM_ISA_ASSERT_IRQ,
- VM_ISA_DEASSERT_IRQ, VM_ISA_PULSE_IRQ, VM_ISA_SET_IRQ_TRIGGER,
- VM_SET_CAPABILITY, VM_GET_CAPABILITY, VM_BIND_PPTDEV,
- VM_UNBIND_PPTDEV, VM_MAP_PPTDEV_MMIO, VM_PPTDEV_MSI,
- VM_PPTDEV_MSIX, VM_UNMAP_PPTDEV_MMIO, VM_PPTDEV_DISABLE_MSIX,
- VM_INJECT_NMI, VM_STATS, VM_STAT_DESC,
- VM_SET_X2APIC_STATE, VM_GET_X2APIC_STATE,
- VM_GET_HPET_CAPABILITIES, VM_GET_GPA_PMAP, VM_GLA2GPA,
- VM_GLA2GPA_NOFAULT,
- VM_ACTIVATE_CPU, VM_GET_CPUS, VM_SUSPEND_CPU, VM_RESUME_CPU,
- VM_SET_INTINFO, VM_GET_INTINFO,
- VM_RTC_WRITE, VM_RTC_READ, VM_RTC_SETTIME, VM_RTC_GETTIME,
- VM_RESTART_INSTRUCTION, VM_SET_TOPOLOGY, VM_GET_TOPOLOGY,
- VM_SNAPSHOT_REQ, VM_RESTORE_TIME
-};
-
int
vm_limit_rights(struct vmctx *ctx)
{
cap_rights_t rights;
- size_t ncmds;
cap_rights_init(&rights, CAP_IOCTL, CAP_MMAP_RW);
if (caph_rights_limit(ctx->fd, &rights) != 0)
return (-1);
- ncmds = nitems(vm_ioctl_cmds);
- if (caph_ioctls_limit(ctx->fd, vm_ioctl_cmds, ncmds) != 0)
+ if (caph_ioctls_limit(ctx->fd, vm_ioctl_cmds, vm_ioctl_ncmds) != 0)
return (-1);
return (0);
}
@@ -1407,15 +1380,17 @@
vm_get_ioctls(size_t *len)
{
cap_ioctl_t *cmds;
+ size_t sz;
if (len == NULL) {
- cmds = malloc(sizeof(vm_ioctl_cmds));
+ sz = vm_ioctl_ncmds * sizeof(vm_ioctl_cmds[0]);
+ cmds = malloc(sz);
if (cmds == NULL)
return (NULL);
- bcopy(vm_ioctl_cmds, cmds, sizeof(vm_ioctl_cmds));
+ bcopy(vm_ioctl_cmds, cmds, sz);
return (cmds);
}
- *len = nitems(vm_ioctl_cmds);
+ *len = vm_ioctl_ncmds;
return (NULL);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 1, 7:10 AM (9 m, 46 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29103104
Default Alt Text
D41001.id.diff (4 KB)
Attached To
Mode
D41001: libvmmapi: Split the ioctl list into MI and MD lists
Attached
Detach File
Event Timeline
Log In to Comment