xref: /aosp_15_r20/frameworks/av/services/mediaresourcemanager/fuzzer/README.md (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker# Fuzzer for libresourcemanagerservice
2*ec779b8eSAndroid Build Coastguard Worker
3*ec779b8eSAndroid Build Coastguard Worker## Plugin Design Considerations
4*ec779b8eSAndroid Build Coastguard WorkerThe fuzzer plugin for libresourcemanagerservice is designed based on the
5*ec779b8eSAndroid Build Coastguard Workerunderstanding of the service and tries to achieve the following:
6*ec779b8eSAndroid Build Coastguard Worker
7*ec779b8eSAndroid Build Coastguard Worker##### Maximize code coverage
8*ec779b8eSAndroid Build Coastguard WorkerThe configuration parameters are not hardcoded, but instead selected based on
9*ec779b8eSAndroid Build Coastguard Workerincoming data. This ensures more code paths are reached by the fuzzer.
10*ec779b8eSAndroid Build Coastguard Worker
11*ec779b8eSAndroid Build Coastguard WorkerMedia Resource Manager supports the following parameters:
12*ec779b8eSAndroid Build Coastguard Worker1. Media Resource Type (parameter name: `mediaResourceType`)
13*ec779b8eSAndroid Build Coastguard Worker2. Media Resource SubType (parameter name: `mediaResourceSubType`)
14*ec779b8eSAndroid Build Coastguard Worker
15*ec779b8eSAndroid Build Coastguard Worker| Parameter| Valid Values| Configured Value|
16*ec779b8eSAndroid Build Coastguard Worker|------------- |-------------| ----- |
17*ec779b8eSAndroid Build Coastguard Worker| `mediaResourceType` | 0.`MediaResource::kSecureCodec` 1.`MediaResource::kNonSecureCodecC` 2.`MediaResource::kGraphicMemory` 3.`MediaResource::kCpuBoost`  4.`MediaResource::kBattery` 5.`MediaResource::kDrmSession`| Value obtained from FuzzedDataProvider |
18*ec779b8eSAndroid Build Coastguard Worker| `mediaResourceSubType`   | 0.`MediaResource::kAudioCodec` 1.`MediaResource::kVideoCodec` 2.`MediaResource::kUnspecifiedSubType`  | Value obtained from FuzzedDataProvider |
19*ec779b8eSAndroid Build Coastguard Worker
20*ec779b8eSAndroid Build Coastguard WorkerThis also ensures that the plugin is always deterministic for any given input.
21*ec779b8eSAndroid Build Coastguard Worker
22*ec779b8eSAndroid Build Coastguard Worker## Build
23*ec779b8eSAndroid Build Coastguard Worker
24*ec779b8eSAndroid Build Coastguard WorkerThis describes steps to build mediaresourcemanager_fuzzer binary.
25*ec779b8eSAndroid Build Coastguard Worker
26*ec779b8eSAndroid Build Coastguard Worker### Android
27*ec779b8eSAndroid Build Coastguard Worker
28*ec779b8eSAndroid Build Coastguard Worker#### Steps to build
29*ec779b8eSAndroid Build Coastguard WorkerBuild the fuzzer
30*ec779b8eSAndroid Build Coastguard Worker```
31*ec779b8eSAndroid Build Coastguard Worker  $ mm -j$(nproc) mediaresourcemanager_fuzzer
32*ec779b8eSAndroid Build Coastguard Worker```
33*ec779b8eSAndroid Build Coastguard Worker
34*ec779b8eSAndroid Build Coastguard Worker#### Steps to run
35*ec779b8eSAndroid Build Coastguard WorkerCreate a directory CORPUS_DIR and copy some files to that folder
36*ec779b8eSAndroid Build Coastguard WorkerPush this directory to device.
37*ec779b8eSAndroid Build Coastguard Worker
38*ec779b8eSAndroid Build Coastguard WorkerTo run on device
39*ec779b8eSAndroid Build Coastguard Worker```
40*ec779b8eSAndroid Build Coastguard Worker  $ adb sync data
41*ec779b8eSAndroid Build Coastguard Worker  $ adb shell /data/fuzz/arm64/mediaresourcemanager_fuzzer/mediaresourcemanager_fuzzer CORPUS_DIR
42*ec779b8eSAndroid Build Coastguard Worker```
43*ec779b8eSAndroid Build Coastguard Worker
44*ec779b8eSAndroid Build Coastguard Worker## References:
45*ec779b8eSAndroid Build Coastguard Worker * http://llvm.org/docs/LibFuzzer.html
46*ec779b8eSAndroid Build Coastguard Worker * https://github.com/google/oss-fuzz
47