On Fri, Mar 4, 2022 at 9:33 AM Benjamin Tissoires
[off-list ref] 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 <redacted>
---
[...]
quoted hunk ↗ jump to hunk
+ 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.
quoted hunk ↗ jump to hunk
+ }
+
+unlock:
+ kfree(ctx);
+
+ mutex_unlock(&bpf_hid_mutex);
+ return ret;
+}
[...]