mini-os/tpmback: add tpmback_get_peercontext

This allows the XSM label of the TPM's client domain to be retrieved.

Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
Daniel De Graaf authored and Ian Campbell committed 2013-04-12 14:28:17 +01:00
1 parent b05cb51b06
commit 9f0cf56683
4 files changed
+36

No files matched your search

+22
View File
@@ -21,6 +21,7 @@
#include <mini-os/hypervisor.h>
#include <mini-os/events.h>
#include <mini-os/lib.h>
#include <xen/xsm/flask_op.h>
#define NR_EVS 1024
@@ -258,6 +259,27 @@ int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
return rc;
}
int evtchn_get_peercontext(evtchn_port_t local_port, char *ctx, int size)
{
int rc;
uint32_t sid;
struct xen_flask_op op;
op.cmd = FLASK_GET_PEER_SID;
op.interface_version = XEN_FLASK_INTERFACE_VERSION;
op.u.peersid.evtchn = local_port;
rc = _hypercall1(int, xsm_op, &op);
if (rc)
return rc;
sid = op.u.peersid.sid;
op.cmd = FLASK_SID_TO_CONTEXT;
op.u.sid_context.sid = sid;
op.u.sid_context.size = size;
set_xen_guest_handle(op.u.sid_context.context, ctx);
rc = _hypercall1(int, xsm_op, &op);
return rc;
}
/*
* Local variables:
* mode: C
+1
View File
@@ -37,6 +37,7 @@ int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler,
int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
evtchn_handler_t handler, void *data,
evtchn_port_t *local_port);
int evtchn_get_peercontext(evtchn_port_t local_port, char *ctx, int size);
void unbind_all_ports(void);
static inline int notify_remote_via_evtchn(evtchn_port_t port)
+2
View File
@@ -99,4 +99,6 @@ void* tpmback_get_opaque(domid_t domid, unsigned int handle);
/* Returns zero if successful, nonzero on failure (no such frontend) */
int tpmback_set_opaque(domid_t domid, unsigned int handle, void* opaque);
/* Get the XSM context of the given domain (using the tpmback event channel) */
int tpmback_get_peercontext(domid_t domid, unsigned int handle, void* buffer, int buflen);
#endif
+11
View File
@@ -830,6 +830,17 @@ unsigned char* tpmback_get_uuid(domid_t domid, unsigned int handle)
return tpmif->uuid;
}
int tpmback_get_peercontext(domid_t domid, unsigned int handle, void* buffer, int buflen)
{
tpmif_t* tpmif;
if((tpmif = get_tpmif(domid, handle)) == NULL) {
TPMBACK_DEBUG("get_uuid() failed, %u/%u is an invalid frontend\n", (unsigned int) domid, handle);
return -1;
}
return evtchn_get_peercontext(tpmif->evtchn, buffer, buflen);
}
static void event_listener(void)
{
const char* bepath = "backend/vtpm";
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.