• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }