Commit ee9ad135b208 ("bpf: Reject a store through a fault prone
pointer") in the BPF tree makes the verifier reject any writes to
hid_device->{name,uniq,phys}. A simple solution is to mark the struct
hid_device as safe from a BPF point of view.

Suggested-by: Daniel Borkmann <[email protected]>
Signed-off-by: Benjamin Tissoires <[email protected]>
---
 drivers/hid/bpf/hid_bpf_struct_ops.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/hid/bpf/hid_bpf_struct_ops.c 
b/drivers/hid/bpf/hid_bpf_struct_ops.c
index 702c22fae136..56c53aca4511 100644
--- a/drivers/hid/bpf/hid_bpf_struct_ops.c
+++ b/drivers/hid/bpf/hid_bpf_struct_ops.c
@@ -62,6 +62,10 @@ struct hid_bpf_offset_write_range {
        u32 end;
 };
 
+struct hid_bpf_ctx__safe_trusted {
+       struct hid_device *hid;
+};
+
 static int hid_bpf_ops_btf_struct_access(struct bpf_verifier_log *log,
                                           const struct bpf_reg_state *reg,
                                           int off, int size)
@@ -86,6 +90,8 @@ static int hid_bpf_ops_btf_struct_access(struct 
bpf_verifier_log *log,
        const char *cur = NULL;
        int i;
 
+       BTF_TYPE_EMIT(struct hid_bpf_ctx__safe_trusted);
+
        t = btf_type_by_id(reg->btf, reg->btf_id);
 
        for (i = 0; i < ARRAY_SIZE(write_ranges); i++) {

-- 
2.55.0


Reply via email to