android/ipc-tester: Add cases for Core message data size
Add testing for improper data sizes for Core service opcodes.
diff --git a/android/ipc-tester.c b/android/ipc-tester.c
index cebe751..3d1561d 100644
--- a/android/ipc-tester.c
+++ b/android/ipc-tester.c
@@ -573,6 +573,27 @@
_servicelist); \
} while (0)
+struct vardata {
+ struct hal_hdr hdr;
+ uint8_t buf[BLUEZ_HAL_MTU];
+} __attribute__((packed));
+
+#define test_datasize_valid(_name, _service, _opcode, _hlen, _addatasize, \
+ _servicelist...) \
+ do { \
+ static struct vardata vdata = { \
+ .hdr.service_id = _service, \
+ .hdr.opcode = _opcode, \
+ .hdr.len = (_hlen) + (_addatasize), \
+ .buf = {}, \
+ }; \
+ test_generic("Data size "_name, \
+ ipc_send_tc, setup, teardown, \
+ &vdata, \
+ sizeof(vdata.hdr) + (_hlen) + (_addatasize),\
+ _servicelist); \
+ } while (0)
+
struct regmod_msg register_bt_msg = {
.header = {
.service_id = HAL_SERVICE_ID_CORE,
@@ -686,5 +707,19 @@
test_opcode_valid("A2DP", HAL_SERVICE_ID_A2DP, 0x03, 0,
HAL_SERVICE_ID_BLUETOOTH, HAL_SERVICE_ID_A2DP);
+
+ /* check for valid data size */
+ test_datasize_valid("CORE Register+", HAL_SERVICE_ID_CORE,
+ HAL_OP_REGISTER_MODULE,
+ sizeof(struct hal_cmd_register_module), 1);
+ test_datasize_valid("CORE Register-", HAL_SERVICE_ID_CORE,
+ HAL_OP_REGISTER_MODULE,
+ sizeof(struct hal_cmd_register_module), -1);
+ test_datasize_valid("CORE Unregister+", HAL_SERVICE_ID_CORE,
+ HAL_OP_UNREGISTER_MODULE,
+ sizeof(struct hal_cmd_register_module), 1);
+ test_datasize_valid("CORE Unregister-", HAL_SERVICE_ID_CORE,
+ HAL_OP_UNREGISTER_MODULE,
+ sizeof(struct hal_cmd_register_module), -1);
return tester_run();
}