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;
+}
[...]