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+
3458void 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