xref: /aosp_15_r20/system/nfc/src/fuzzers/rw/t1t.cc (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
1*7eba2f3bSAndroid Build Coastguard Worker #include "fuzz.h"
2*7eba2f3bSAndroid Build Coastguard Worker 
3*7eba2f3bSAndroid Build Coastguard Worker #define MODULE_NAME "Type1 Read/Write"
4*7eba2f3bSAndroid Build Coastguard Worker 
5*7eba2f3bSAndroid Build Coastguard Worker enum {
6*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_PRESENCE_CHECK,
7*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_RID,
8*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_READ_ALL,
9*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_READ,
10*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_WRITE_ERASE,
11*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_WRITE_NO_ERASE,
12*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_READ_SEG,
13*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_READ_8,
14*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_WRITE_ERASE_8,
15*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_WRITE_NO_ERASE_8,
16*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_FORMAT_NDEF,
17*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_LOCATE_TLV,
18*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_READ_NDEF,
19*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_WRITE_NDEF,
20*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_SET_READONLY,
21*7eba2f3bSAndroid Build Coastguard Worker 
22*7eba2f3bSAndroid Build Coastguard Worker   SUB_TYPE_MAX
23*7eba2f3bSAndroid Build Coastguard Worker };
24*7eba2f3bSAndroid Build Coastguard Worker 
rw_cback(tRW_EVENT event,tRW_DATA * p_rw_data)25*7eba2f3bSAndroid Build Coastguard Worker static void rw_cback(tRW_EVENT event, tRW_DATA* p_rw_data) {
26*7eba2f3bSAndroid Build Coastguard Worker   FUZZLOG(MODULE_NAME ": rw_cback: event=0x%02x, p_rw_data=%p", event,
27*7eba2f3bSAndroid Build Coastguard Worker           p_rw_data);
28*7eba2f3bSAndroid Build Coastguard Worker 
29*7eba2f3bSAndroid Build Coastguard Worker   if (event == RW_T1T_RAW_FRAME_EVT || event == RW_T1T_RID_EVT ||
30*7eba2f3bSAndroid Build Coastguard Worker       event == RW_T1T_RALL_CPLT_EVT || event == RW_T1T_READ_CPLT_EVT ||
31*7eba2f3bSAndroid Build Coastguard Worker       event == RW_T1T_RSEG_CPLT_EVT || event == RW_T1T_READ8_CPLT_EVT) {
32*7eba2f3bSAndroid Build Coastguard Worker     if (p_rw_data->data.p_data) {
33*7eba2f3bSAndroid Build Coastguard Worker       GKI_freebuf(p_rw_data->data.p_data);
34*7eba2f3bSAndroid Build Coastguard Worker       p_rw_data->data.p_data = nullptr;
35*7eba2f3bSAndroid Build Coastguard Worker     }
36*7eba2f3bSAndroid Build Coastguard Worker   }
37*7eba2f3bSAndroid Build Coastguard Worker }
38*7eba2f3bSAndroid Build Coastguard Worker 
39*7eba2f3bSAndroid Build Coastguard Worker #define TEST_NFCID_VALUE \
40*7eba2f3bSAndroid Build Coastguard Worker   { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }
41*7eba2f3bSAndroid Build Coastguard Worker 
Init(Fuzz_Context &)42*7eba2f3bSAndroid Build Coastguard Worker static bool Init(Fuzz_Context& /*ctx*/) {
43*7eba2f3bSAndroid Build Coastguard Worker   tNFC_ACTIVATE_DEVT activate_params = {
44*7eba2f3bSAndroid Build Coastguard Worker       .protocol = NFC_PROTOCOL_T1T,
45*7eba2f3bSAndroid Build Coastguard Worker       .rf_tech_param = {.mode = NFC_DISCOVERY_TYPE_POLL_A,
46*7eba2f3bSAndroid Build Coastguard Worker                         .param = {.pa = {
47*7eba2f3bSAndroid Build Coastguard Worker                                       .hr = {T1T_NDEF_SUPPORTED, 0x01},
48*7eba2f3bSAndroid Build Coastguard Worker                                       .nfcid1 = TEST_NFCID_VALUE,
49*7eba2f3bSAndroid Build Coastguard Worker                                   }}}};
50*7eba2f3bSAndroid Build Coastguard Worker 
51*7eba2f3bSAndroid Build Coastguard Worker   rw_init();
52*7eba2f3bSAndroid Build Coastguard Worker   if (NFC_STATUS_OK != RW_SetActivatedTagType(&activate_params, rw_cback)) {
53*7eba2f3bSAndroid Build Coastguard Worker     FUZZLOG(MODULE_NAME ": RW_SetActivatedTagType failed");
54*7eba2f3bSAndroid Build Coastguard Worker     return false;
55*7eba2f3bSAndroid Build Coastguard Worker   }
56*7eba2f3bSAndroid Build Coastguard Worker 
57*7eba2f3bSAndroid Build Coastguard Worker   return true;
58*7eba2f3bSAndroid Build Coastguard Worker }
59*7eba2f3bSAndroid Build Coastguard Worker 
Init_PresenceCheck(Fuzz_Context &)60*7eba2f3bSAndroid Build Coastguard Worker static bool Init_PresenceCheck(Fuzz_Context& /*ctx*/) {
61*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tPresenceCheck();
62*7eba2f3bSAndroid Build Coastguard Worker }
63*7eba2f3bSAndroid Build Coastguard Worker 
Init_Rid(Fuzz_Context &)64*7eba2f3bSAndroid Build Coastguard Worker static bool Init_Rid(Fuzz_Context& /*ctx*/) {
65*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tRid();
66*7eba2f3bSAndroid Build Coastguard Worker }
67*7eba2f3bSAndroid Build Coastguard Worker 
Init_ReadAll(Fuzz_Context &)68*7eba2f3bSAndroid Build Coastguard Worker static bool Init_ReadAll(Fuzz_Context& /*ctx*/) {
69*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tReadAll();
70*7eba2f3bSAndroid Build Coastguard Worker }
71*7eba2f3bSAndroid Build Coastguard Worker 
Init_Read(Fuzz_Context &)72*7eba2f3bSAndroid Build Coastguard Worker static bool Init_Read(Fuzz_Context& /*ctx*/) {
73*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tRead(0, 0x10);
74*7eba2f3bSAndroid Build Coastguard Worker }
75*7eba2f3bSAndroid Build Coastguard Worker 
Init_WriteErase(Fuzz_Context &)76*7eba2f3bSAndroid Build Coastguard Worker static bool Init_WriteErase(Fuzz_Context& /*ctx*/) {
77*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tWriteErase(0, 0x10, 0x20);
78*7eba2f3bSAndroid Build Coastguard Worker }
79*7eba2f3bSAndroid Build Coastguard Worker 
Init_WriteNoErase(Fuzz_Context &)80*7eba2f3bSAndroid Build Coastguard Worker static bool Init_WriteNoErase(Fuzz_Context& /*ctx*/) {
81*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tWriteNoErase(0, 0x10, 0x20);
82*7eba2f3bSAndroid Build Coastguard Worker }
83*7eba2f3bSAndroid Build Coastguard Worker 
Init_ReadSeg(Fuzz_Context &)84*7eba2f3bSAndroid Build Coastguard Worker static bool Init_ReadSeg(Fuzz_Context& /*ctx*/) {
85*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tReadSeg(0);
86*7eba2f3bSAndroid Build Coastguard Worker }
87*7eba2f3bSAndroid Build Coastguard Worker 
Init_Read8(Fuzz_Context &)88*7eba2f3bSAndroid Build Coastguard Worker static bool Init_Read8(Fuzz_Context& /*ctx*/) {
89*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tRead8(0);
90*7eba2f3bSAndroid Build Coastguard Worker }
91*7eba2f3bSAndroid Build Coastguard Worker 
Init_WriteErase8(Fuzz_Context & ctx)92*7eba2f3bSAndroid Build Coastguard Worker static bool Init_WriteErase8(Fuzz_Context& ctx) {
93*7eba2f3bSAndroid Build Coastguard Worker   const uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04,
94*7eba2f3bSAndroid Build Coastguard Worker                           0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04};
95*7eba2f3bSAndroid Build Coastguard Worker 
96*7eba2f3bSAndroid Build Coastguard Worker   auto scratch = ctx.GetBuffer(sizeof(data), data);
97*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tWriteErase8(0, scratch);
98*7eba2f3bSAndroid Build Coastguard Worker }
99*7eba2f3bSAndroid Build Coastguard Worker 
Init_WriteNoErase8(Fuzz_Context & ctx)100*7eba2f3bSAndroid Build Coastguard Worker static bool Init_WriteNoErase8(Fuzz_Context& ctx) {
101*7eba2f3bSAndroid Build Coastguard Worker   const uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04,
102*7eba2f3bSAndroid Build Coastguard Worker                           0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04};
103*7eba2f3bSAndroid Build Coastguard Worker 
104*7eba2f3bSAndroid Build Coastguard Worker   auto scratch = ctx.GetBuffer(sizeof(data), data);
105*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tWriteNoErase8(0, scratch);
106*7eba2f3bSAndroid Build Coastguard Worker }
107*7eba2f3bSAndroid Build Coastguard Worker 
Init_FormatNdef(Fuzz_Context &)108*7eba2f3bSAndroid Build Coastguard Worker static bool Init_FormatNdef(Fuzz_Context& /*ctx*/) {
109*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tFormatNDef();
110*7eba2f3bSAndroid Build Coastguard Worker }
Init_LocateTlv(Fuzz_Context &)111*7eba2f3bSAndroid Build Coastguard Worker static bool Init_LocateTlv(Fuzz_Context& /*ctx*/) {
112*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tLocateTlv(TAG_NDEF_TLV);
113*7eba2f3bSAndroid Build Coastguard Worker }
Init_ReadNdef(Fuzz_Context & ctx)114*7eba2f3bSAndroid Build Coastguard Worker static bool Init_ReadNdef(Fuzz_Context& ctx) {
115*7eba2f3bSAndroid Build Coastguard Worker   tRW_T1T_CB* p_t1t = &rw_cb.tcb.t1t;
116*7eba2f3bSAndroid Build Coastguard Worker   p_t1t->tag_attribute = RW_T1_TAG_ATTRB_READ_WRITE;
117*7eba2f3bSAndroid Build Coastguard Worker   p_t1t->ndef_msg_len = 256;
118*7eba2f3bSAndroid Build Coastguard Worker 
119*7eba2f3bSAndroid Build Coastguard Worker   auto scratch = ctx.GetBuffer(4096);
120*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tReadNDef(scratch, 4096);
121*7eba2f3bSAndroid Build Coastguard Worker }
Init_WriteNdef(Fuzz_Context & ctx)122*7eba2f3bSAndroid Build Coastguard Worker static bool Init_WriteNdef(Fuzz_Context& ctx) {
123*7eba2f3bSAndroid Build Coastguard Worker   const uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04,
124*7eba2f3bSAndroid Build Coastguard Worker                           0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04};
125*7eba2f3bSAndroid Build Coastguard Worker 
126*7eba2f3bSAndroid Build Coastguard Worker   auto scratch = ctx.GetBuffer(sizeof(data), data);
127*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tWriteNDef(sizeof(data), scratch);
128*7eba2f3bSAndroid Build Coastguard Worker }
Init_SetReadOnly(Fuzz_Context &)129*7eba2f3bSAndroid Build Coastguard Worker static bool Init_SetReadOnly(Fuzz_Context& /*ctx*/) {
130*7eba2f3bSAndroid Build Coastguard Worker   return NFC_STATUS_OK == RW_T1tSetTagReadOnly(true);
131*7eba2f3bSAndroid Build Coastguard Worker }
132*7eba2f3bSAndroid Build Coastguard Worker 
Fuzz_Init(Fuzz_Context & ctx)133*7eba2f3bSAndroid Build Coastguard Worker static bool Fuzz_Init(Fuzz_Context& ctx) {
134*7eba2f3bSAndroid Build Coastguard Worker   if (!Init(ctx)) {
135*7eba2f3bSAndroid Build Coastguard Worker     FUZZLOG(MODULE_NAME ": initialization failed");
136*7eba2f3bSAndroid Build Coastguard Worker     return false;
137*7eba2f3bSAndroid Build Coastguard Worker   }
138*7eba2f3bSAndroid Build Coastguard Worker 
139*7eba2f3bSAndroid Build Coastguard Worker   bool result = false;
140*7eba2f3bSAndroid Build Coastguard Worker   switch (ctx.SubType) {
141*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_PRESENCE_CHECK:
142*7eba2f3bSAndroid Build Coastguard Worker       result = Init_PresenceCheck(ctx);
143*7eba2f3bSAndroid Build Coastguard Worker       break;
144*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_RID:
145*7eba2f3bSAndroid Build Coastguard Worker       result = Init_Rid(ctx);
146*7eba2f3bSAndroid Build Coastguard Worker       break;
147*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_READ_ALL:
148*7eba2f3bSAndroid Build Coastguard Worker       result = Init_ReadAll(ctx);
149*7eba2f3bSAndroid Build Coastguard Worker       break;
150*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_READ:
151*7eba2f3bSAndroid Build Coastguard Worker       result = Init_Read(ctx);
152*7eba2f3bSAndroid Build Coastguard Worker       break;
153*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_WRITE_ERASE:
154*7eba2f3bSAndroid Build Coastguard Worker       result = Init_WriteErase(ctx);
155*7eba2f3bSAndroid Build Coastguard Worker       break;
156*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_WRITE_NO_ERASE:
157*7eba2f3bSAndroid Build Coastguard Worker       result = Init_WriteNoErase(ctx);
158*7eba2f3bSAndroid Build Coastguard Worker       break;
159*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_READ_SEG:
160*7eba2f3bSAndroid Build Coastguard Worker       result = Init_ReadSeg(ctx);
161*7eba2f3bSAndroid Build Coastguard Worker       break;
162*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_READ_8:
163*7eba2f3bSAndroid Build Coastguard Worker       result = Init_Read8(ctx);
164*7eba2f3bSAndroid Build Coastguard Worker       break;
165*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_WRITE_ERASE_8:
166*7eba2f3bSAndroid Build Coastguard Worker       result = Init_WriteErase8(ctx);
167*7eba2f3bSAndroid Build Coastguard Worker       break;
168*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_WRITE_NO_ERASE_8:
169*7eba2f3bSAndroid Build Coastguard Worker       result = Init_WriteNoErase8(ctx);
170*7eba2f3bSAndroid Build Coastguard Worker       break;
171*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_FORMAT_NDEF:
172*7eba2f3bSAndroid Build Coastguard Worker       result = Init_FormatNdef(ctx);
173*7eba2f3bSAndroid Build Coastguard Worker       break;
174*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_LOCATE_TLV:
175*7eba2f3bSAndroid Build Coastguard Worker       result = Init_LocateTlv(ctx);
176*7eba2f3bSAndroid Build Coastguard Worker       break;
177*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_READ_NDEF:
178*7eba2f3bSAndroid Build Coastguard Worker       result = Init_ReadNdef(ctx);
179*7eba2f3bSAndroid Build Coastguard Worker       break;
180*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_WRITE_NDEF:
181*7eba2f3bSAndroid Build Coastguard Worker       result = Init_WriteNdef(ctx);
182*7eba2f3bSAndroid Build Coastguard Worker       break;
183*7eba2f3bSAndroid Build Coastguard Worker     case SUB_TYPE_SET_READONLY:
184*7eba2f3bSAndroid Build Coastguard Worker       result = Init_SetReadOnly(ctx);
185*7eba2f3bSAndroid Build Coastguard Worker       break;
186*7eba2f3bSAndroid Build Coastguard Worker 
187*7eba2f3bSAndroid Build Coastguard Worker     default:
188*7eba2f3bSAndroid Build Coastguard Worker       FUZZLOG(MODULE_NAME ": Unknown command %d", ctx.SubType);
189*7eba2f3bSAndroid Build Coastguard Worker       result = false;
190*7eba2f3bSAndroid Build Coastguard Worker       break;
191*7eba2f3bSAndroid Build Coastguard Worker   }
192*7eba2f3bSAndroid Build Coastguard Worker 
193*7eba2f3bSAndroid Build Coastguard Worker   if (!result) {
194*7eba2f3bSAndroid Build Coastguard Worker     FUZZLOG(MODULE_NAME ": Initializing command %02X failed", ctx.SubType);
195*7eba2f3bSAndroid Build Coastguard Worker   }
196*7eba2f3bSAndroid Build Coastguard Worker 
197*7eba2f3bSAndroid Build Coastguard Worker   return result;
198*7eba2f3bSAndroid Build Coastguard Worker }
199*7eba2f3bSAndroid Build Coastguard Worker 
Fuzz_Deinit(Fuzz_Context &)200*7eba2f3bSAndroid Build Coastguard Worker static void Fuzz_Deinit(Fuzz_Context& /*ctx*/) {
201*7eba2f3bSAndroid Build Coastguard Worker   if (rf_cback) {
202*7eba2f3bSAndroid Build Coastguard Worker     tNFC_CONN conn = {
203*7eba2f3bSAndroid Build Coastguard Worker         .deactivate = {.status = NFC_STATUS_OK,
204*7eba2f3bSAndroid Build Coastguard Worker                        .type = NFC_DEACTIVATE_TYPE_IDLE,
205*7eba2f3bSAndroid Build Coastguard Worker                        .is_ntf = true,
206*7eba2f3bSAndroid Build Coastguard Worker                        .reason = NFC_DEACTIVATE_REASON_DH_REQ_FAILED}};
207*7eba2f3bSAndroid Build Coastguard Worker 
208*7eba2f3bSAndroid Build Coastguard Worker     rf_cback(NFC_RF_CONN_ID, NFC_DEACTIVATE_CEVT, &conn);
209*7eba2f3bSAndroid Build Coastguard Worker   }
210*7eba2f3bSAndroid Build Coastguard Worker }
211*7eba2f3bSAndroid Build Coastguard Worker 
Fuzz_Run(Fuzz_Context & ctx)212*7eba2f3bSAndroid Build Coastguard Worker static void Fuzz_Run(Fuzz_Context& ctx) {
213*7eba2f3bSAndroid Build Coastguard Worker   for (auto it = ctx.Data.cbegin() + 1; it != ctx.Data.cend(); ++it) {
214*7eba2f3bSAndroid Build Coastguard Worker     NFC_HDR* p_msg;
215*7eba2f3bSAndroid Build Coastguard Worker     p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR) + it->size());
216*7eba2f3bSAndroid Build Coastguard Worker     if (p_msg == nullptr || it->size() < 1) {
217*7eba2f3bSAndroid Build Coastguard Worker       FUZZLOG(MODULE_NAME ": GKI_getbuf returns null, size=%zu", it->size());
218*7eba2f3bSAndroid Build Coastguard Worker       return;
219*7eba2f3bSAndroid Build Coastguard Worker     }
220*7eba2f3bSAndroid Build Coastguard Worker 
221*7eba2f3bSAndroid Build Coastguard Worker     /* Initialize NFC_HDR */
222*7eba2f3bSAndroid Build Coastguard Worker     p_msg->len = it->size() - 1;
223*7eba2f3bSAndroid Build Coastguard Worker     p_msg->offset = 0;
224*7eba2f3bSAndroid Build Coastguard Worker 
225*7eba2f3bSAndroid Build Coastguard Worker     uint8_t* p = (uint8_t*)(p_msg + 1) + p_msg->offset;
226*7eba2f3bSAndroid Build Coastguard Worker     memcpy(p, it->data(), it->size());
227*7eba2f3bSAndroid Build Coastguard Worker 
228*7eba2f3bSAndroid Build Coastguard Worker     tNFC_CONN conn = {.data = {
229*7eba2f3bSAndroid Build Coastguard Worker                           .status = NFC_STATUS_OK,
230*7eba2f3bSAndroid Build Coastguard Worker                           .p_data = p_msg,
231*7eba2f3bSAndroid Build Coastguard Worker                       }};
232*7eba2f3bSAndroid Build Coastguard Worker 
233*7eba2f3bSAndroid Build Coastguard Worker     FUZZLOG(MODULE_NAME ": SubType=%02X, Response[%zd/%zd]=%s", ctx.SubType,
234*7eba2f3bSAndroid Build Coastguard Worker             it - ctx.Data.cbegin(), ctx.Data.size() - 1,
235*7eba2f3bSAndroid Build Coastguard Worker             BytesToHex(*it).c_str());
236*7eba2f3bSAndroid Build Coastguard Worker 
237*7eba2f3bSAndroid Build Coastguard Worker     rf_cback(NFC_RF_CONN_ID, NFC_DATA_CEVT, &conn);
238*7eba2f3bSAndroid Build Coastguard Worker   }
239*7eba2f3bSAndroid Build Coastguard Worker }
240*7eba2f3bSAndroid Build Coastguard Worker 
Type1_FixPackets(uint8_t,std::vector<bytes_t> &)241*7eba2f3bSAndroid Build Coastguard Worker void Type1_FixPackets(uint8_t /*SubType*/, std::vector<bytes_t>& /*Data*/) {}
242*7eba2f3bSAndroid Build Coastguard Worker 
Type1_Fuzz(uint8_t SubType,const std::vector<bytes_t> & Data)243*7eba2f3bSAndroid Build Coastguard Worker void Type1_Fuzz(uint8_t SubType, const std::vector<bytes_t>& Data) {
244*7eba2f3bSAndroid Build Coastguard Worker   Fuzz_Context ctx(SubType % SUB_TYPE_MAX, Data);
245*7eba2f3bSAndroid Build Coastguard Worker   if (Fuzz_Init(ctx)) {
246*7eba2f3bSAndroid Build Coastguard Worker     Fuzz_Run(ctx);
247*7eba2f3bSAndroid Build Coastguard Worker   }
248*7eba2f3bSAndroid Build Coastguard Worker   Fuzz_Deinit(ctx);
249*7eba2f3bSAndroid Build Coastguard Worker }
250