1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "softbushisysevt_fuzzer.h"
17
18 #include <cstddef>
19 #include <cstdint>
20 #include <securec.h>
21 #include "fuzz_data_generator.h"
22 #include "softbus_error_code.h"
23 #include "legacy/softbus_hisysevt_bus_center.h"
24 #include "legacy/softbus_hisysevt_common.h"
25 #include "legacy/softbus_hisysevt_connreporter.h"
26 #include "legacy/softbus_hisysevt_discreporter.h"
27 #include "legacy/softbus_hisysevt_transreporter.h"
28
29 namespace OHOS {
30 static constexpr int32_t BUFF_MAX_LEN = 65;
ReportStatisticEvt()31 int32_t ReportStatisticEvt()
32 {
33 return 0;
34 }
35
SoftBusRecordAuthResultFuzzTest(const uint8_t * data,size_t size)36 void SoftBusRecordAuthResultFuzzTest(const uint8_t *data, size_t size)
37 {
38 InitBusCenterDfx();
39 SoftBusLinkType linkType = *(reinterpret_cast<const SoftBusLinkType *>(data));
40 int32_t ret = 0;
41 uint64_t constTime = 0;
42 DataGenerator::Write(data, size);
43 GenerateInt32(ret);
44 GenerateUint64(constTime);
45 DataGenerator::Clear();
46 AuthFailStage stage = *(reinterpret_cast<const AuthFailStage *>(data));
47 SoftBusRecordAuthResult(linkType, ret, constTime, stage);
48 }
49
SoftBusRecordBusCenterResultFuzzTest(const uint8_t * data,size_t size)50 void SoftBusRecordBusCenterResultFuzzTest(const uint8_t *data, size_t size)
51 {
52 InitBusCenterDfx();
53 SoftBusLinkType linkType = *(reinterpret_cast<const SoftBusLinkType *>(data));
54 uint64_t constTime = 0;
55 DataGenerator::Write(data, size);
56 GenerateUint64(constTime);
57 DataGenerator::Clear();
58 SoftBusRecordBusCenterResult(linkType, constTime);
59 }
60
SoftBusRecordDevOnlineDurResultFuzzTest(const uint8_t * data,size_t size)61 void SoftBusRecordDevOnlineDurResultFuzzTest(const uint8_t *data, size_t size)
62 {
63 InitBusCenterDfx();
64 uint64_t constTime = 0;
65 DataGenerator::Write(data, size);
66 GenerateUint64(constTime);
67 DataGenerator::Clear();
68 SoftBusRecordDevOnlineDurResult(constTime);
69 }
70
SoftBusReportDevOnlineEvtFuzzTest(const uint8_t * data,size_t size)71 void SoftBusReportDevOnlineEvtFuzzTest(const uint8_t *data, size_t size)
72 {
73 InitBusCenterDfx();
74 char udid[BUFF_MAX_LEN] = {0};
75 if (memcpy_s(udid, sizeof(udid) - 1, data, size) != EOK) {
76 return;
77 }
78 OnlineDeviceInfo info = {0};
79 DataGenerator::Write(data, size);
80 GenerateUint32(info.onlineDevNum);
81 GenerateUint32(info.btOnlineDevNum);
82 GenerateUint32(info.wifiOnlineDevNum);
83 GenerateUint32(info.peerDevType);
84 GenerateInt32(info.insertFileResult);
85 DataGenerator::Clear();
86 SoftBusReportDevOnlineEvt(&info, udid);
87 }
88
SoftBusReportBusCenterFaultEvtFuzzTest(const uint8_t * data,size_t size)89 void SoftBusReportBusCenterFaultEvtFuzzTest(const uint8_t *data, size_t size)
90 {
91 InitBusCenterDfx();
92 SoftBusFaultEvtInfo info = {0};
93 DataGenerator::Write(data, size);
94 GenerateUint8(info.moduleType);
95 GenerateUint8(info.linkType);
96 GenerateFloat(info.channelQuality);
97 GenerateInt32(info.errorCode);
98 GenerateInt32(info.peerDevType);
99 GenerateInt32(info.onLineDevNum);
100 GenerateInt32(info.connNum);
101 GenerateInt32(info.nightMode);
102 GenerateInt32(info.wifiStatue);
103 GenerateInt32(info.bleStatue);
104 GenerateInt32(info.callerAppMode);
105 GenerateInt32(info.subErrCode);
106 GenerateInt32(info.connBrNum);
107 GenerateInt32(info.connBleNum);
108 GenerateBool(info.bleBradStatus);
109 GenerateBool(info.bleScanStatus);
110 DataGenerator::Clear();
111 SoftBusReportBusCenterFaultEvt(&info);
112 }
113
SoftBusRecordDiscoveryResultFuzzTest(const uint8_t * data,size_t size)114 void SoftBusRecordDiscoveryResultFuzzTest(const uint8_t *data, size_t size)
115 {
116 InitBusCenterDfx();
117 DiscoveryStage stage = *(reinterpret_cast<const DiscoveryStage *>(data));
118 AppDiscNode node = {0};
119 DataGenerator::Write(data, size);
120 GenerateInt32(node.appDiscCnt);
121 DataGenerator::Clear();
122 SoftBusRecordDiscoveryResult(stage, &node);
123 }
124
SoftBusHiSysEvtCommonFuzzTest(const uint8_t * data,size_t size)125 void SoftBusHiSysEvtCommonFuzzTest(const uint8_t *data, size_t size)
126 {
127 StatisticEvtType evtType = *(reinterpret_cast<const StatisticEvtType *>(data));
128 SetStatisticEvtReportFunc(evtType, ReportStatisticEvt);
129 GetStatisticEvtReportFunc(evtType);
130 }
131
SoftBusHiSysEvtTransReporterFuzzTest(const uint8_t * data,size_t size)132 void SoftBusHiSysEvtTransReporterFuzzTest(const uint8_t *data, size_t size)
133 {
134 char tmp[BUFF_MAX_LEN] = {0};
135 if (memcpy_s(tmp, sizeof(tmp) - 1, data, size) != EOK) {
136 return;
137 }
138 InitTransStatisticSysEvt();
139 GetSoftbusRecordTimeMillis();
140 SoftbusReportTransErrorEvt(SOFTBUS_ACCESS_TOKEN_DENIED);
141 SoftbusReportTransInfoEvt(reinterpret_cast<const char *>(tmp));
142 SoftbusRecordOpenSession(SOFTBUS_EVT_OPEN_SESSION_SUCC, 0);
143 }
144 } // namespace OHOS
145
146 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)147 extern "C" int32_t LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
148 {
149 if (data == nullptr || size < sizeof(uint64_t)) {
150 return 0;
151 }
152
153 OHOS::SoftBusRecordAuthResultFuzzTest(data, size);
154 OHOS::SoftBusRecordBusCenterResultFuzzTest(data, size);
155 OHOS::SoftBusRecordDevOnlineDurResultFuzzTest(data, size);
156 OHOS::SoftBusReportDevOnlineEvtFuzzTest(data, size);
157 OHOS::SoftBusReportBusCenterFaultEvtFuzzTest(data, size);
158 OHOS::SoftBusRecordDiscoveryResultFuzzTest(data, size);
159 OHOS::SoftBusHiSysEvtCommonFuzzTest(data, size);
160 OHOS::SoftBusHiSysEvtTransReporterFuzzTest(data, size);
161
162 return 0;
163 }