• 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 "updateiccdiallingnumbers_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 #include <thread>
21 
22 #define private public
23 #include "addcoreservicetoken_fuzzer.h"
24 #include "core_service.h"
25 #include "napi_util.h"
26 #include "system_ability_definition.h"
27 #include "tel_event_handler.h"
28 #include "unistd.h"
29 
30 using namespace OHOS::Telephony;
31 namespace OHOS {
32 static bool g_isInited = false;
33 constexpr int32_t SLOT_NUM = 2;
34 constexpr int32_t ACCEPT_TYPE = 2;
35 constexpr int32_t SIM_TYPE_NUM = 2;
36 constexpr int32_t SLEEP_TIME_SECONDS = 2;
37 
IsServiceInited()38 bool IsServiceInited()
39 {
40     if (!g_isInited) {
41         DelayedSingleton<CoreService>::GetInstance()->OnStart();
42         if (DelayedSingleton<CoreService>::GetInstance()->GetServiceRunningState() ==
43             static_cast<int32_t>(ServiceRunningState::STATE_RUNNING)) {
44             g_isInited = true;
45         }
46     }
47     return g_isInited;
48 }
49 
GetOpKey(const uint8_t * data,size_t size)50 void GetOpKey(const uint8_t *data, size_t size)
51 {
52     if (!IsServiceInited()) {
53         return;
54     }
55 
56     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
57     MessageParcel dataMessageParcel;
58     dataMessageParcel.WriteInt32(slotId);
59     dataMessageParcel.WriteBuffer(data, size);
60     dataMessageParcel.RewindRead(0);
61     MessageParcel reply;
62     DelayedSingleton<CoreService>::GetInstance()->OnGetOpKey(dataMessageParcel, reply);
63 }
64 
GetOpKeyExt(const uint8_t * data,size_t size)65 void GetOpKeyExt(const uint8_t *data, size_t size)
66 {
67     if (!IsServiceInited()) {
68         return;
69     }
70 
71     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
72     MessageParcel dataMessageParcel;
73     dataMessageParcel.WriteInt32(slotId);
74 
75     dataMessageParcel.WriteBuffer(data, size);
76     dataMessageParcel.RewindRead(0);
77     MessageParcel reply;
78     DelayedSingleton<CoreService>::GetInstance()->OnGetOpKeyExt(dataMessageParcel, reply);
79 }
80 
GetOpName(const uint8_t * data,size_t size)81 void GetOpName(const uint8_t *data, size_t size)
82 {
83     if (!IsServiceInited()) {
84         return;
85     }
86 
87     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
88     MessageParcel dataMessageParcel;
89     dataMessageParcel.WriteInt32(slotId);
90 
91     dataMessageParcel.WriteBuffer(data, size);
92     dataMessageParcel.RewindRead(0);
93     MessageParcel reply;
94     DelayedSingleton<CoreService>::GetInstance()->OnGetOpName(dataMessageParcel, reply);
95 }
96 
SendCallSetupRequestResult(const uint8_t * data,size_t size)97 void SendCallSetupRequestResult(const uint8_t *data, size_t size)
98 {
99     if (!IsServiceInited()) {
100         return;
101     }
102 
103     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
104     int32_t accept = static_cast<int32_t>(*data % ACCEPT_TYPE);
105     MessageParcel dataMessageParcel;
106     dataMessageParcel.WriteInt32(slotId);
107     dataMessageParcel.WriteInt32(accept);
108 
109     dataMessageParcel.WriteBuffer(data, size);
110     dataMessageParcel.RewindRead(0);
111     MessageParcel reply;
112     DelayedSingleton<CoreService>::GetInstance()->OnSendCallSetupRequestResult(dataMessageParcel, reply);
113 }
114 
HasOperatorPrivileges(const uint8_t * data,size_t size)115 void HasOperatorPrivileges(const uint8_t *data, size_t size)
116 {
117     if (!IsServiceInited()) {
118         return;
119     }
120 
121     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
122     MessageParcel dataMessageParcel;
123     dataMessageParcel.WriteInt32(slotId);
124 
125     dataMessageParcel.WriteBuffer(data, size);
126     dataMessageParcel.RewindRead(0);
127     MessageParcel reply;
128     DelayedSingleton<CoreService>::GetInstance()->OnHasOperatorPrivileges(dataMessageParcel, reply);
129 }
130 
GetCellInfoList(const uint8_t * data,size_t size)131 void GetCellInfoList(const uint8_t *data, size_t size)
132 {
133     if (!IsServiceInited()) {
134         return;
135     }
136 
137     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
138     MessageParcel dataMessageParcel;
139     dataMessageParcel.WriteInt32(slotId);
140 
141     dataMessageParcel.WriteBuffer(data, size);
142     dataMessageParcel.RewindRead(0);
143     MessageParcel reply;
144     DelayedSingleton<CoreService>::GetInstance()->OnGetCellInfoList(dataMessageParcel, reply);
145 }
146 
UpdateIccDiallingNumbers(const uint8_t * data,size_t size)147 void UpdateIccDiallingNumbers(const uint8_t *data, size_t size)
148 {
149     if (!IsServiceInited()) {
150         return;
151     }
152 
153     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
154     int32_t type = *data % SIM_TYPE_NUM + 1;
155     MessageParcel dataMessageParcel;
156     dataMessageParcel.WriteInt32(slotId);
157     dataMessageParcel.WriteInt32(type);
158     dataMessageParcel.WriteBuffer(data, size);
159     dataMessageParcel.RewindRead(0);
160     MessageParcel reply;
161     DelayedSingleton<CoreService>::GetInstance()->OnUpdateIccDiallingNumbers(dataMessageParcel, reply);
162 }
163 
GetNrSsbIdInfoTesting(const uint8_t * data,size_t size)164 void GetNrSsbIdInfoTesting(const uint8_t *data, size_t size)
165 {
166     if (!IsServiceInited()) {
167         return;
168     }
169 
170     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
171     MessageParcel dataMessageParcel;
172     dataMessageParcel.WriteInt32(slotId);
173 
174     dataMessageParcel.WriteBuffer(data, size);
175     dataMessageParcel.RewindRead(0);
176     MessageParcel reply;
177     DelayedSingleton<CoreService>::GetInstance()->OnGetNrSsbIdInfo(dataMessageParcel, reply);
178 }
179 
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)180 void DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
181 {
182     if (data == nullptr || size == 0) {
183         return;
184     }
185 
186     GetOpKey(data, size);
187     GetOpKeyExt(data, size);
188     GetOpName(data, size);
189     SendCallSetupRequestResult(data, size);
190     HasOperatorPrivileges(data, size);
191     GetCellInfoList(data, size);
192     UpdateIccDiallingNumbers(data, size);
193     GetNrSsbIdInfoTesting(data, size);
194     auto telRilManager = DelayedSingleton<CoreService>::GetInstance()->telRilManager_;
195     if (telRilManager == nullptr || telRilManager->handler_ == nullptr) {
196         return;
197     }
198     auto handler = telRilManager->handler_;
199     if (handler != nullptr) {
200         handler->RemoveAllEvents();
201         handler->SendEvent(0, 0, AppExecFwk::EventQueue::Priority::HIGH);
202         sleep(SLEEP_TIME_SECONDS);
203     }
204     telRilManager->handler_->ClearFfrt(false);
205     telRilManager->handler_->queue_ = nullptr;
206     return;
207 }
208 } // namespace OHOS
209 
210 /* Fuzzer entry point */
LLVMFuzzerInitialize(int * argc,char *** argv)211 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
212 {
213     OHOS::AddCoreServiceTokenFuzzer token;
214     return 0;
215 }
216 
217 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)218 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
219 {
220     /* Run your code on data */
221     OHOS::DoSomethingInterestingWithMyAPI(data, size);
222     OHOS::DelayedSingleton<CoreService>::DestroyInstance();
223     return 0;
224 }
225