| # Copyright 2018 syzkaller project authors. All rights reserved. |
| # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. |
| |
| include <uapi/linux/fcntl.h> |
| include <uapi/linux/uhid.h> |
| |
| resource fd_uhid[fd] |
| |
| openat$uhid(fd const[AT_FDCWD], file ptr[in, string["/dev/uhid"]], flags flags[uhid_open_flags], mode const[0]) fd_uhid |
| write$UHID_CREATE(fd fd_uhid, data ptr[in, uhid_create_req], len len[data]) |
| write$UHID_CREATE2(fd fd_uhid, data ptr[in, uhid_create2_req], len len[data]) |
| write$UHID_DESTROY(fd fd_uhid, data ptr[in, uhid_destroy_req], len len[data]) |
| write$UHID_INPUT(fd fd_uhid, data ptr[in, uhid_input_req], len len[data]) |
| write$UHID_INPUT2(fd fd_uhid, data ptr[in, uhid_input2_req], len len[data]) |
| write$UHID_GET_REPORT_REPLY(fd fd_uhid, data ptr[in, uhid_get_report_req], len len[data]) |
| write$UHID_SET_REPORT_REPLY(fd fd_uhid, data ptr[in, uhid_set_report_req], len len[data]) |
| |
| uhid_create_req { |
| type const[UHID_CREATE, int32] |
| name string[uhid_names, 128] |
| phys string[uhid_names, 64] |
| uniq string[uhid_names, 64] |
| rd_data ptr[out, array[int8]] |
| rd_size len[rd_data, int16] |
| bus int16 |
| vendor int32 |
| product int32 |
| version int32 |
| country int32 |
| } [packed] |
| |
| uhid_create2_req { |
| type const[UHID_CREATE2, int32] |
| name string[uhid_names, 128] |
| phys string[uhid_names, 64] |
| uniq string[uhid_names, 64] |
| rd_size len[rd_data, int16] |
| bus int16 |
| vendor int32 |
| product int32 |
| version int32 |
| country int32 |
| rd_data array[int8] |
| } [packed] |
| |
| uhid_destroy_req { |
| type const[UHID_DESTROY, int32] |
| } [packed] |
| |
| uhid_input_req { |
| type const[UHID_INPUT, int32] |
| data array[int8, UHID_DATA_MAX] |
| size len[data, int16] |
| } [packed] |
| |
| uhid_input2_req { |
| type const[UHID_INPUT2, int32] |
| size len[data, int16] |
| data array[int8] |
| } [packed] |
| |
| uhid_get_report_req { |
| type const[UHID_GET_REPORT_REPLY, int32] |
| id int32[0:10] |
| rnum int8 |
| rtype int8 |
| } [packed] |
| |
| uhid_set_report_req { |
| type const[UHID_SET_REPORT_REPLY, int32] |
| id int32[0:10] |
| rnum int8 |
| rtype int8 |
| size len[data, int16] |
| data array[int8] |
| } [packed] |
| |
| uhid_names = "syz0", "syz1" |
| uhid_open_flags = O_RDWR, O_RDWR_NONBLOCK |
| |
| define O_RDWR_NONBLOCK O_RDWR | O_NONBLOCK |