Skip to content

Commit 6dfc509

Browse files
Treehugger RobotGerrit Code Review
authored andcommitted
Merge "Add meta transactions in fuzzService" into main
2 parents 48f26a3 + 19561e2 commit 6dfc509

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

libs/binder/tests/parcel_fuzzer/Android.bp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ cc_library_static {
109109
"libcutils",
110110
"libutils",
111111
],
112+
header_libs: [
113+
"libaidl_transactions",
114+
],
112115
local_include_dirs: ["include_random_parcel"],
113116
export_include_dirs: ["include_random_parcel"],
114117
}

libs/binder/tests/parcel_fuzzer/libbinder_driver.cpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16+
17+
#include <aidl/transaction_ids.h>
1618
#include <fuzzbinder/libbinder_driver.h>
1719

1820
#include <fuzzbinder/random_parcel.h>
@@ -31,6 +33,28 @@ void fuzzService(const sp<IBinder>& binder, FuzzedDataProvider&& provider) {
3133
fuzzService(std::vector<sp<IBinder>>{binder}, std::move(provider));
3234
}
3335

36+
uint32_t getCode(FuzzedDataProvider& provider) {
37+
if (provider.ConsumeBool()) {
38+
return provider.ConsumeIntegral<uint32_t>();
39+
}
40+
41+
// Most of the AIDL services will have small set of transaction codes.
42+
if (provider.ConsumeBool()) {
43+
return provider.ConsumeIntegralInRange<uint32_t>(0, 100);
44+
}
45+
46+
if (provider.ConsumeBool()) {
47+
return provider.PickValueInArray<uint32_t>(
48+
{IBinder::DUMP_TRANSACTION, IBinder::PING_TRANSACTION,
49+
IBinder::SHELL_COMMAND_TRANSACTION, IBinder::INTERFACE_TRANSACTION,
50+
IBinder::SYSPROPS_TRANSACTION, IBinder::EXTENSION_TRANSACTION,
51+
IBinder::TWEET_TRANSACTION, IBinder::LIKE_TRANSACTION});
52+
}
53+
54+
return provider.ConsumeIntegralInRange<uint32_t>(aidl::kLastMetaMethodId,
55+
aidl::kFirstMetaMethodId);
56+
}
57+
3458
void fuzzService(const std::vector<sp<IBinder>>& binders, FuzzedDataProvider&& provider) {
3559
RandomParcelOptions options{
3660
.extraBinders = binders,
@@ -61,16 +85,7 @@ void fuzzService(const std::vector<sp<IBinder>>& binders, FuzzedDataProvider&& p
6185
}
6286

6387
while (provider.remaining_bytes() > 0) {
64-
// Most of the AIDL services will have small set of transaction codes.
65-
// TODO(b/295942369) : Add remaining transact codes from IBinder.h
66-
uint32_t code = provider.ConsumeBool() ? provider.ConsumeIntegral<uint32_t>()
67-
: provider.ConsumeBool()
68-
? provider.ConsumeIntegralInRange<uint32_t>(0, 100)
69-
: provider.PickValueInArray<uint32_t>(
70-
{IBinder::DUMP_TRANSACTION, IBinder::PING_TRANSACTION,
71-
IBinder::SHELL_COMMAND_TRANSACTION, IBinder::INTERFACE_TRANSACTION,
72-
IBinder::SYSPROPS_TRANSACTION, IBinder::EXTENSION_TRANSACTION,
73-
IBinder::TWEET_TRANSACTION, IBinder::LIKE_TRANSACTION});
88+
uint32_t code = getCode(provider);
7489
uint32_t flags = provider.ConsumeIntegral<uint32_t>();
7590
Parcel data;
7691
// for increased fuzz coverage

0 commit comments

Comments
 (0)