On Fri, Mar 4, 2022 at 9:33 AM Benjamin Tissoires benjamin.tissoires@redhat.com wrote:
Given that we can not call bpf_hid_raw_request() from within an IRQ, userspace needs to have a way to communicate with the device when it needs.
Implement a new type that the caller can run at will without being in an IRQ context.
Signed-off-by: Benjamin Tissoires benjamin.tissoires@redhat.com
[...]
if (user_size_out && data_out) {user_size_out = min3(user_size_out, (u32)ctx->size, (u32)ctx->allocated_size);if (copy_to_user(data_out, ctx->data, user_size_out)) {ret = -EFAULT;goto unlock;}if (copy_to_user(&uattr->test.data_size_out,&user_size_out,sizeof(user_size_out))) {ret = -EFAULT;goto unlock;}}if (copy_to_user(&uattr->test.retval, &ctx->u.user.retval, sizeof(ctx->u.user.retval))) {ret = -EFAULT;goto unlock;
nit: this goto is not really needed.
}+unlock:
kfree(ctx);mutex_unlock(&bpf_hid_mutex);return ret;+}
[...]