Fuzz introspector: usbredirparserfuzz
For issues and ideas: https://github.com/ossf/fuzz-introspector/issues

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
0 4 2 :

['free', 'va_log']

0 4 usbredirparser_queue call site: 00129 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1237
0 4 2 :

['free', 'va_log']

0 4 serialize_alloc call site: 00198 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1599
0 0 None 2 261 usbredirparser_unserialize call site: 00191 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1813
0 0 None 2 55 usbredirparser_unserialize call site: 00191 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1991
0 0 None 2 2 usbredirparser_do_write call site: 00249 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1177
0 0 None 0 11 usbredirparser_unserialize call site: 00191 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1942
0 0 None 0 4 usbredirparser_queue call site: 00082 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1223
0 0 None 0 4 usbredirparser_queue call site: 00092 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1228
0 0 None 0 4 unserialize_data call site: 00162 /work/build/../../src/spice-usbredir/usbredirparser/usbredirparser.c:1691

Fuzzer calltree

0 LLVMFuzzerTestOneInput [function] [call site] 00000
1 usbredirparser_create [function] [call site] 00001
2 calloc [call site] 00002
1 (anonymous namespace)::parser_log(void*, int, char const*) [function] [call site] 00003
1 (anonymous namespace)::parser_read(void*, unsigned char*, int) [function] [call site] 00004
2 (anonymous namespace)::wobbly_read_write_count(int) [function] [call site] 00005
1 (anonymous namespace)::parser_write(void*, unsigned char*, int) [function] [call site] 00006
2 (anonymous namespace)::wobbly_read_write_count(int) [function] [call site] 00007
2 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00008
1 (anonymous namespace)::parser_device_connect(void*, usb_redir_device_connect_header*) [function] [call site] 00009
1 (anonymous namespace)::parser_device_disconnect(void*) [function] [call site] 00010
1 (anonymous namespace)::parser_reset(void*) [function] [call site] 00011
1 (anonymous namespace)::parser_interface_info(void*, usb_redir_interface_info_header*) [function] [call site] 00012
1 (anonymous namespace)::parser_ep_info(void*, usb_redir_ep_info_header*) [function] [call site] 00013
1 (anonymous namespace)::parser_set_configuration(void*, unsigned long, usb_redir_set_configuration_header*) [function] [call site] 00014
1 (anonymous namespace)::parser_get_configuration(void*, unsigned long) [function] [call site] 00015
1 (anonymous namespace)::parser_configuration_status(void*, unsigned long, usb_redir_configuration_status_header*) [function] [call site] 00016
1 (anonymous namespace)::parser_set_alt_setting(void*, unsigned long, usb_redir_set_alt_setting_header*) [function] [call site] 00017
1 (anonymous namespace)::parser_get_alt_setting(void*, unsigned long, usb_redir_get_alt_setting_header*) [function] [call site] 00018
1 (anonymous namespace)::parser_alt_setting_status(void*, unsigned long, usb_redir_alt_setting_status_header*) [function] [call site] 00019
1 (anonymous namespace)::parser_start_iso_stream(void*, unsigned long, usb_redir_start_iso_stream_header*) [function] [call site] 00020
1 (anonymous namespace)::parser_stop_iso_stream(void*, unsigned long, usb_redir_stop_iso_stream_header*) [function] [call site] 00021
1 (anonymous namespace)::parser_iso_stream_status(void*, unsigned long, usb_redir_iso_stream_status_header*) [function] [call site] 00022
1 (anonymous namespace)::parser_start_interrupt_receiving(void*, unsigned long, usb_redir_start_interrupt_receiving_header*) [function] [call site] 00023
1 (anonymous namespace)::parser_stop_interrupt_receiving(void*, unsigned long, usb_redir_stop_interrupt_receiving_header*) [function] [call site] 00024
1 (anonymous namespace)::parser_interrupt_receiving_status(void*, unsigned long, usb_redir_interrupt_receiving_status_header*) [function] [call site] 00025
1 (anonymous namespace)::parser_alloc_bulk_streams(void*, unsigned long, usb_redir_alloc_bulk_streams_header*) [function] [call site] 00026
1 (anonymous namespace)::parser_free_bulk_streams(void*, unsigned long, usb_redir_free_bulk_streams_header*) [function] [call site] 00027
1 (anonymous namespace)::parser_bulk_streams_status(void*, unsigned long, usb_redir_bulk_streams_status_header*) [function] [call site] 00028
1 (anonymous namespace)::parser_cancel_data_packet(void*, unsigned long) [function] [call site] 00029
1 (anonymous namespace)::parser_control_packet(void*, unsigned long, usb_redir_control_packet_header*, unsigned char*, int) [function] [call site] 00030
2 void (anonymous namespace)::read_all (usb_redir_control_packet_header const*) [function] [call site] 00031
3 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00032
2 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00033
2 usbredirparser_free_packet_data [function] [call site] 00034
1 (anonymous namespace)::parser_bulk_packet(void*, unsigned long, usb_redir_bulk_packet_header*, unsigned char*, int) [function] [call site] 00035
2 void (anonymous namespace)::read_all (usb_redir_bulk_packet_header const*) [function] [call site] 00036
2 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00037
2 usbredirparser_free_packet_data [function] [call site] 00038
1 (anonymous namespace)::parser_iso_packet(void*, unsigned long, usb_redir_iso_packet_header*, unsigned char*, int) [function] [call site] 00039
2 void (anonymous namespace)::read_all (usb_redir_iso_packet_header const*) [function] [call site] 00040
2 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00041
2 usbredirparser_free_packet_data [function] [call site] 00042
1 (anonymous namespace)::parser_interrupt_packet(void*, unsigned long, usb_redir_interrupt_packet_header*, unsigned char*, int) [function] [call site] 00043
2 void (anonymous namespace)::read_all (usb_redir_interrupt_packet_header const*) [function] [call site] 00044
2 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00045
2 usbredirparser_free_packet_data [function] [call site] 00046
1 (anonymous namespace)::parser_alloc_lock() [function] [call site] 00047
1 (anonymous namespace)::parser_lock(void*) [function] [call site] 00048
1 (anonymous namespace)::parser_unlock(void*) [function] [call site] 00049
1 (anonymous namespace)::parser_free_lock(void*) [function] [call site] 00050
1 (anonymous namespace)::parser_hello(void*, usb_redir_hello_header*) [function] [call site] 00051
1 (anonymous namespace)::parser_filter_reject(void*) [function] [call site] 00052
1 (anonymous namespace)::parser_filter_filter(void*, usbredirfilter_rule*, int) [function] [call site] 00053
2 usbredirfilter_free [function] [call site] 00054
1 (anonymous namespace)::parser_device_disconnect_ack(void*) [function] [call site] 00055
1 (anonymous namespace)::parser_start_bulk_receiving(void*, unsigned long, usb_redir_start_bulk_receiving_header*) [function] [call site] 00056
2 void (anonymous namespace)::read_all (usb_redir_start_bulk_receiving_header const*) [function] [call site] 00057
1 (anonymous namespace)::parser_stop_bulk_receiving(void*, unsigned long, usb_redir_stop_bulk_receiving_header*) [function] [call site] 00058
2 void (anonymous namespace)::read_all (usb_redir_stop_bulk_receiving_header const*) [function] [call site] 00059
1 (anonymous namespace)::parser_bulk_receiving_status(void*, unsigned long, usb_redir_bulk_receiving_status_header*) [function] [call site] 00060
2 void (anonymous namespace)::read_all (usb_redir_bulk_receiving_status_header const*) [function] [call site] 00061
1 (anonymous namespace)::parser_buffered_bulk_packet(void*, unsigned long, usb_redir_buffered_bulk_packet_header*, unsigned char*, int) [function] [call site] 00062
2 void (anonymous namespace)::read_all (usb_redir_buffered_bulk_packet_header const*) [function] [call site] 00063
2 (anonymous namespace)::read_all(void const*, unsigned long) [function] [call site] 00064
2 usbredirparser_free_packet_data [function] [call site] 00065
1 usbredirparser_init [function] [call site] 00066
2 snprintf [call site] 00067
2 usbredirparser_caps_set_cap [function] [call site] 00068
2 usbredirparser_verify_caps [function] [call site] 00069
3 usbredirparser_caps_get_cap [function] [call site] 00070
4 va_log [function] [call site] 00071
5 vsnprintf [call site] 00072
3 usbredirparser_caps_get_cap [function] [call site] 00073
2 usbredirparser_queue [function] [call site] 00075
3 usbredirparser_get_header_len [function] [call site] 00076
4 usbredirparser_using_32bits_ids [function] [call site] 00077
5 usbredirparser_have_cap [function] [call site] 00078
6 usbredirparser_caps_get_cap [function] [call site] 00079
5 usbredirparser_peer_has_cap [function] [call site] 00080
6 usbredirparser_caps_get_cap [function] [call site] 00081
3 usbredirparser_get_type_header_len [function] [call site] 00082
4 usbredirparser_have_cap [function] [call site] 00083
4 usbredirparser_peer_has_cap [function] [call site] 00084
4 usbredirparser_have_cap [function] [call site] 00085
4 usbredirparser_peer_has_cap [function] [call site] 00086
4 usbredirparser_have_cap [function] [call site] 00087
4 usbredirparser_peer_has_cap [function] [call site] 00088
4 usbredirparser_have_cap [function] [call site] 00089
4 usbredirparser_peer_has_cap [function] [call site] 00090
3 usbredirparser_verify_type_header [function] [call site] 00092
4 usbredirparser_peer_has_cap [function] [call site] 00097
4 usbredirparser_have_cap [function] [call site] 00098
4 usbredirparser_peer_has_cap [function] [call site] 00100
4 usbredirparser_have_cap [function] [call site] 00101
4 usbredirparser_peer_has_cap [function] [call site] 00105
4 usbredirparser_have_cap [function] [call site] 00106
4 usbredirparser_verify_bulk_recv_cap [function] [call site] 00108
5 usbredirparser_peer_has_cap [function] [call site] 00109
5 usbredirparser_have_cap [function] [call site] 00110
4 usbredirparser_verify_bulk_recv_cap [function] [call site] 00114
4 usbredirparser_verify_bulk_recv_cap [function] [call site] 00116
4 usbredirparser_have_cap [function] [call site] 00118
4 usbredirparser_peer_has_cap [function] [call site] 00119
4 usbredirparser_verify_bulk_recv_cap [function] [call site] 00121
3 calloc [call site] 00129
3 usbredirparser_using_32bits_ids [function] [call site] 00131
1 (anonymous namespace)::try_unserialize(usbredirparser*, FuzzedDataProvider*) [function] [call site] 00132
2 __assert_fail [call site] 00133
2 usbredirparser_unserialize [function] [call site] 00134
3 usbredirparser_assert_invariants [function] [call site] 00135
4 __assert_fail [call site] 00136
4 __assert_fail [call site] 00137
4 __assert_fail [call site] 00138
4 __assert_fail [call site] 00139
4 __assert_fail [call site] 00140
4 __assert_fail [call site] 00141
4 __assert_fail [call site] 00142
4 __assert_fail [call site] 00143
4 __assert_fail [call site] 00144
4 __assert_fail [call site] 00145
4 __assert_fail [call site] 00146
4 __assert_fail [call site] 00147
4 __assert_fail [call site] 00148
4 __assert_fail [call site] 00149
4 __assert_fail [call site] 00150
4 __assert_fail [call site] 00151
4 __assert_fail [call site] 00152
3 unserialize_int [function] [call site] 00158
3 unserialize_data [function] [call site] 00169
3 unserialize_int [function] [call site] 00170
3 usbredirparser_get_header_len [function] [call site] 00171
3 unserialize_data [function] [call site] 00172
3 usbredirparser_get_type_header_len [function] [call site] 00174
3 usbredirparser_expect_extra_data [function] [call site] 00175
3 usbredirparser_assert_invariants [function] [call site] 00177
3 unserialize_data [function] [call site] 00178
3 unserialize_data [function] [call site] 00180
3 unserialize_int [function] [call site] 00181
3 usbredirparser_assert_invariants [function] [call site] 00182
3 unserialize_data [function] [call site] 00183
3 usbredirparser_assert_invariants [function] [call site] 00184
3 usbredirparser_assert_invariants [function] [call site] 00186
3 calloc [call site] 00187
3 usbredirparser_assert_invariants [function] [call site] 00189
3 usbredirparser_assert_invariants [function] [call site] 00191
1 usbredirparser_has_data_to_write [function] [call site] 00192
1 (anonymous namespace)::try_serialize(usbredirparser*) [function] [call site] 00193
2 usbredirparser_serialize [function] [call site] 00194
3 serialize_int [function] [call site] 00195
4 serialize_alloc [function] [call site] 00197
5 realloc [call site] 00198
3 serialize_int [function] [call site] 00200
3 serialize_data [function] [call site] 00201
3 serialize_data [function] [call site] 00205
3 serialize_int [function] [call site] 00206
3 serialize_int [function] [call site] 00207
3 serialize_data [function] [call site] 00208
3 serialize_data [function] [call site] 00209
3 serialize_data [function] [call site] 00210
3 serialize_int [function] [call site] 00211
3 serialize_data [function] [call site] 00212
1 usbredirparser_do_read [function] [call site] 00213
2 usbredirparser_get_header_len [function] [call site] 00214
2 usbredirparser_assert_invariants [function] [call site] 00215
2 usbredirparser_assert_invariants [function] [call site] 00216
2 usbredirparser_get_type_header_len [function] [call site] 00217
2 usbredirparser_expect_extra_data [function] [call site] 00221
2 usbredirparser_verify_type_header [function] [call site] 00224
2 usbredirparser_call_type_func [function] [call site] 00225
3 usbredirparser_using_32bits_ids [function] [call site] 00226
3 usbredirparser_handle_hello [function] [call site] 00227
4 strncpy [call site] 00228
4 usbredirparser_verify_caps [function] [call site] 00229
4 usbredirparser_using_32bits_ids [function] [call site] 00230
3 usbredirparser_peer_has_cap [function] [call site] 00231
3 usbredirparser_queue [function] [call site] 00232
3 usbredirfilter_string_to_rules [function] [call site] 00233
4 strspn [call site] 00234
4 strcspn [call site] 00235
4 calloc [call site] 00236
4 strdup [call site] 00237
4 strtok_r [call site] 00238
4 strtok_r [call site] 00239
4 strtol [call site] 00240
4 strtok_r [call site] 00241
4 usbredirfilter_verify [function] [call site] 00242
4 strtok_r [call site] 00243
2 usbredirparser_get_header_len [function] [call site] 00245
1 (anonymous namespace)::try_serialize(usbredirparser*) [function] [call site] 00246
1 usbredirparser_has_data_to_write [function] [call site] 00247
1 usbredirparser_do_write [function] [call site] 00248
2 __assert_fail [call site] 00249
2 abort [call site] 00250