uvio_attest
memcpy(uvcb_attest->user_data, uvio_attest->user_data, sizeof(uvcb_attest->user_data));
uvcb_attest->meas_len = uvio_attest->meas_len;
uvcb_attest->add_data_len = uvio_attest->add_data_len;
struct uvio_attest *uvio_attest)
struct uvio_attest __user *user_uvio_attest = (void __user *)uv_ioctl->argument_addr;
void __user *user_buf_add = (void __user *)uvio_attest->add_data_addr;
void __user *user_buf_meas = (void __user *)uvio_attest->meas_addr;
if (copy_to_user(user_buf_meas, measurement, uvio_attest->meas_len))
if (add_data && copy_to_user(user_buf_add, add_data, uvio_attest->add_data_len))
if (put_user(uvio_attest->add_data_len, user_buf_add_len))
static int get_uvio_attest(struct uvio_ioctl_cb *uv_ioctl, struct uvio_attest *uvio_attest)
if (copy_from_user(uvio_attest, user_arg_buf, sizeof(*uvio_attest)))
if (uvio_attest->arcb_len > UVIO_ATT_ARCB_MAX_LEN)
if (uvio_attest->arcb_len == 0)
if (uvio_attest->meas_len > UVIO_ATT_MEASUREMENT_MAX_LEN)
if (uvio_attest->meas_len == 0)
if (uvio_attest->add_data_len > UVIO_ATT_ADDITIONAL_MAX_LEN)
if (uvio_attest->reserved136)
struct uvio_attest *uvio_attest = NULL;
if (uv_ioctl->argument_len != sizeof(*uvio_attest))
uvio_attest = kzalloc_obj(*uvio_attest);
if (!uvio_attest)
ret = get_uvio_attest(uv_ioctl, uvio_attest);
arcb = kvzalloc(uvio_attest->arcb_len, GFP_KERNEL);
measurement = kvzalloc(uvio_attest->meas_len, GFP_KERNEL);
if (uvio_attest->add_data_len) {
add_data = kvzalloc(uvio_attest->add_data_len, GFP_KERNEL);
ret = uvio_build_uvcb_attest(uvcb_attest, arcb, measurement, add_data, uvio_attest);
uvio_attest);
kfree(uvio_attest);
u8 *meas, u8 *add_data, struct uvio_attest *uvio_attest)
void __user *user_buf_arcb = (void __user *)uvio_attest->arcb_addr;
if (copy_from_user(arcb, user_buf_arcb, uvio_attest->arcb_len))
uvcb_attest->user_data_len = uvio_attest->user_data_len;
struct uvio_attest uvio_attest;
self->uvio_ioctl.argument_addr = (__u64)&self->uvio_attest;
self->uvio_ioctl.argument_len = sizeof(self->uvio_attest);
self->uvio_attest.arcb_addr = (__u64)&self->attest_buffer.arcb;
self->uvio_attest.arcb_len = sizeof(self->attest_buffer.arcb);
self->uvio_attest.meas_addr = (__u64)&self->attest_buffer.meas;
self->uvio_attest.meas_len = sizeof(self->attest_buffer.meas);
self->uvio_attest.add_data_addr = (__u64)&self->attest_buffer.add;
self->uvio_attest.add_data_len = sizeof(self->attest_buffer.add);
att_inval_sizes_test(&self->uvio_attest.add_data_len, UVIO_ATT_ADDITIONAL_MAX_LEN,
att_inval_sizes_test(&self->uvio_attest.meas_len, UVIO_ATT_MEASUREMENT_MAX_LEN,
att_inval_sizes_test(&self->uvio_attest.arcb_len, UVIO_ATT_ARCB_MAX_LEN,
self->uvio_attest.reserved136 = (uint16_t)-1;
memset(&self->uvio_attest, 0x11, sizeof(self->uvio_attest));
att_inval_addr_test(&self->uvio_attest.arcb_addr, _metadata, self);
att_inval_addr_test(&self->uvio_attest.add_data_addr, _metadata, self);
att_inval_addr_test(&self->uvio_attest.meas_addr, _metadata, self);
.arg_size = sizeof(struct uvio_attest),