nimble/test: Assert all os_mbuf operations

This makes sure tests don't use invalid memory in case of os_mbuf bug.

X-Original-Commit: 1a43ed04274fb24c1c7588b62925a23b229ebc08
This commit is contained in:
Szymon Janc
2017-08-31 16:04:10 +02:00
parent bfa341f173
commit f38900bcad
9 changed files with 107 additions and 47 deletions
+42 -17
View File
@@ -44,6 +44,8 @@ static uint16_t ble_att_svr_test_attr_n_len;
static int
ble_att_svr_test_misc_gap_cb(struct ble_gap_event *event, void *arg)
{
int rc;
switch (event->type) {
case BLE_GAP_EVENT_NOTIFY_RX:
ble_att_svr_test_n_conn_handle = event->notify_rx.conn_handle;
@@ -51,8 +53,10 @@ ble_att_svr_test_misc_gap_cb(struct ble_gap_event *event, void *arg)
TEST_ASSERT_FATAL(OS_MBUF_PKTLEN(event->notify_rx.om) <=
sizeof ble_att_svr_test_attr_n);
ble_att_svr_test_attr_n_len = OS_MBUF_PKTLEN(event->notify_rx.om);
os_mbuf_copydata(event->notify_rx.om, 0, ble_att_svr_test_attr_n_len,
ble_att_svr_test_attr_n);
rc = os_mbuf_copydata(event->notify_rx.om, 0,
ble_att_svr_test_attr_n_len,
ble_att_svr_test_attr_n);
TEST_ASSERT_FATAL(rc == 0);
break;
default:
@@ -102,14 +106,17 @@ ble_att_svr_test_misc_attr_fn_r_1(uint16_t conn_handle, uint16_t attr_handle,
uint8_t op, uint16_t offset,
struct os_mbuf **om, void *arg)
{
int rc;
switch (op) {
case BLE_ATT_ACCESS_OP_READ:
if (offset > ble_att_svr_test_attr_r_1_len) {
return BLE_ATT_ERR_INVALID_OFFSET;
}
os_mbuf_append(*om, ble_att_svr_test_attr_r_1 + offset,
ble_att_svr_test_attr_r_1_len - offset);
rc = os_mbuf_append(*om, ble_att_svr_test_attr_r_1 + offset,
ble_att_svr_test_attr_r_1_len - offset);
TEST_ASSERT_FATAL(rc == 0);
return 0;
default:
@@ -122,6 +129,7 @@ ble_att_svr_test_misc_attr_fn_r_2(uint16_t conn_handle, uint16_t attr_handle,
uint8_t op, uint16_t offset,
struct os_mbuf **om, void *arg)
{
int rc;
switch (op) {
case BLE_ATT_ACCESS_OP_READ:
@@ -129,8 +137,9 @@ ble_att_svr_test_misc_attr_fn_r_2(uint16_t conn_handle, uint16_t attr_handle,
return BLE_ATT_ERR_INVALID_OFFSET;
}
os_mbuf_append(*om, ble_att_svr_test_attr_r_2 + offset,
ble_att_svr_test_attr_r_2_len - offset);
rc = os_mbuf_append(*om, ble_att_svr_test_attr_r_2 + offset,
ble_att_svr_test_attr_r_2_len - offset);
TEST_ASSERT_FATAL(rc == 0);
return 0;
default:
@@ -143,7 +152,11 @@ ble_att_svr_test_misc_attr_fn_r_err(uint16_t conn_handle, uint16_t attr_handle,
uint8_t op, uint16_t offset,
struct os_mbuf **om, void *arg)
{
os_mbuf_append(*om, (uint8_t[4]){1,2,3,4}, 4);
int rc;
rc = os_mbuf_append(*om, (uint8_t[4]){1,2,3,4}, 4);
TEST_ASSERT_FATAL(rc == 0);
return BLE_ATT_ERR_UNLIKELY;
}
@@ -286,19 +299,23 @@ ble_att_svr_test_misc_attr_fn_rw_1(uint16_t conn_handle, uint16_t attr_handle,
uint8_t op, uint16_t offset,
struct os_mbuf **om, void *arg)
{
int rc;
switch (op) {
case BLE_ATT_ACCESS_OP_READ:
if (offset > ble_att_svr_test_attr_w_1_len) {
return BLE_ATT_ERR_INVALID_OFFSET;
}
os_mbuf_append(*om, ble_att_svr_test_attr_w_1 + offset,
ble_att_svr_test_attr_w_1_len - offset);
rc = os_mbuf_append(*om, ble_att_svr_test_attr_w_1 + offset,
ble_att_svr_test_attr_w_1_len - offset);
TEST_ASSERT_FATAL(rc == 0);
return 0;
case BLE_ATT_ACCESS_OP_WRITE:
os_mbuf_copydata(*om, 0, OS_MBUF_PKTLEN(*om),
ble_att_svr_test_attr_w_1);
rc = os_mbuf_copydata(*om, 0, OS_MBUF_PKTLEN(*om),
ble_att_svr_test_attr_w_1);
TEST_ASSERT_FATAL(rc == 0);
ble_att_svr_test_attr_w_1_len = OS_MBUF_PKTLEN(*om);
return 0;
@@ -312,10 +329,13 @@ ble_att_svr_test_misc_attr_fn_w_1(uint16_t conn_handle, uint16_t attr_handle,
uint8_t op, uint16_t offset,
struct os_mbuf **om, void *arg)
{
int rc;
switch (op) {
case BLE_ATT_ACCESS_OP_WRITE:
os_mbuf_copydata(*om, 0, OS_MBUF_PKTLEN(*om),
ble_att_svr_test_attr_w_1);
rc = os_mbuf_copydata(*om, 0, OS_MBUF_PKTLEN(*om),
ble_att_svr_test_attr_w_1);
TEST_ASSERT_FATAL(rc == 0);
ble_att_svr_test_attr_w_1_len = OS_MBUF_PKTLEN(*om);
return 0;
@@ -329,10 +349,13 @@ ble_att_svr_test_misc_attr_fn_w_2(uint16_t conn_handle, uint16_t attr_handle,
uint8_t op, uint16_t offset,
struct os_mbuf **om, void *arg)
{
int rc;
switch (op) {
case BLE_ATT_ACCESS_OP_WRITE:
os_mbuf_copydata(*om, 0, OS_MBUF_PKTLEN(*om),
ble_att_svr_test_attr_w_2);
rc = os_mbuf_copydata(*om, 0, OS_MBUF_PKTLEN(*om),
ble_att_svr_test_attr_w_2);
TEST_ASSERT_FATAL(rc == 0);
ble_att_svr_test_attr_w_2_len = OS_MBUF_PKTLEN(*om);
return 0;
@@ -856,7 +879,8 @@ TEST_CASE(ble_att_svr_test_read)
TEST_ASSERT(OS_MBUF_PKTLEN(om) == ble_att_svr_test_attr_r_1_len);
TEST_ASSERT(os_mbuf_cmpf(om, 0, ble_att_svr_test_attr_r_1,
ble_att_svr_test_attr_r_1_len) == 0);
os_mbuf_free_chain(om);
rc = os_mbuf_free_chain(om);
TEST_ASSERT_FATAL(rc == 0);
/* Ensure no response got sent. */
ble_hs_test_util_tx_all();
@@ -2049,7 +2073,8 @@ TEST_CASE(ble_att_svr_test_oom)
ble_hs_test_util_verify_tx_err_rsp(BLE_ATT_OP_INDICATE_REQ, 1,
BLE_ATT_ERR_INSUFFICIENT_RES);
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
}
TEST_SUITE(ble_att_svr_suite)
+10 -4
View File
@@ -589,7 +589,9 @@ TEST_CASE(ble_gatt_disc_c_test_oom_all)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -611,7 +613,9 @@ TEST_CASE(ble_gatt_disc_c_test_oom_all)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify that procedure completes when mbufs are available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -678,7 +682,8 @@ TEST_CASE(ble_gatt_disc_c_test_oom_uuid)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -700,7 +705,8 @@ TEST_CASE(ble_gatt_disc_c_test_oom_uuid)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify that procedure completes when mbufs are available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
+4 -2
View File
@@ -406,7 +406,8 @@ TEST_CASE(ble_gatt_disc_d_test_oom_all)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -428,7 +429,8 @@ TEST_CASE(ble_gatt_disc_d_test_oom_all)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure succeeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
+10 -5
View File
@@ -442,7 +442,8 @@ TEST_CASE(ble_gatt_disc_s_test_oom_all)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -461,7 +462,8 @@ TEST_CASE(ble_gatt_disc_s_test_oom_all)
ticks_until = ble_gattc_timer();
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -521,7 +523,8 @@ TEST_CASE(ble_gatt_disc_s_test_oom_uuid)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
ble_hs_test_util_tx_all();
@@ -542,7 +545,8 @@ TEST_CASE(ble_gatt_disc_s_test_oom_uuid)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify that procedure completes when mbufs are available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -617,7 +621,8 @@ TEST_CASE(ble_gatt_disc_s_test_oom_timeout)
TEST_ASSERT(ticks_until == BLE_HS_FOREVER);
TEST_ASSERT(!ble_gattc_any_jobs());
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
}
TEST_SUITE(ble_gatt_disc_s_test_suite)
+4 -2
View File
@@ -395,7 +395,8 @@ TEST_CASE(ble_gatt_find_s_test_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure succeeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -414,7 +415,8 @@ TEST_CASE(ble_gatt_find_s_test_oom)
ble_gatt_find_s_test_misc_rx_read_type(1, incs + 1);
/* Verify the procedure succeeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
+11 -5
View File
@@ -62,6 +62,7 @@ ble_gatt_read_test_cb(uint16_t conn_handle, const struct ble_gatt_error *error,
{
struct ble_gatt_read_test_attr *dst;
int *stop_after;
int rc;
stop_after = arg;
@@ -88,7 +89,8 @@ ble_gatt_read_test_cb(uint16_t conn_handle, const struct ble_gatt_error *error,
dst->conn_handle = conn_handle;
dst->handle = attr->handle;
dst->value_len = OS_MBUF_PKTLEN(attr->om);
os_mbuf_copydata(attr->om, 0, OS_MBUF_PKTLEN(attr->om), dst->value);
rc = os_mbuf_copydata(attr->om, 0, OS_MBUF_PKTLEN(attr->om), dst->value);
TEST_ASSERT_FATAL(rc == 0);
if (stop_after != NULL && *stop_after > 0) {
(*stop_after)--;
@@ -110,6 +112,7 @@ ble_gatt_read_test_long_cb(uint16_t conn_handle,
{
struct ble_gatt_read_test_attr *dst;
int *reads_left;
int rc;
reads_left = arg;
@@ -140,8 +143,9 @@ ble_gatt_read_test_long_cb(uint16_t conn_handle,
TEST_ASSERT(conn_handle == dst->conn_handle);
TEST_ASSERT(attr->handle == dst->handle);
}
os_mbuf_copydata(attr->om, 0, OS_MBUF_PKTLEN(attr->om),
dst->value + dst->value_len);
rc = os_mbuf_copydata(attr->om, 0, OS_MBUF_PKTLEN(attr->om),
dst->value + dst->value_len);
TEST_ASSERT_FATAL(rc == 0);
dst->value_len += OS_MBUF_PKTLEN(attr->om);
if (reads_left != NULL && *reads_left > 0) {
@@ -859,7 +863,8 @@ TEST_CASE(ble_gatt_read_test_long_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
ble_hs_test_util_tx_all();
@@ -883,7 +888,8 @@ TEST_CASE(ble_gatt_read_test_long_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify that procedure completes when mbufs are available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
+8 -4
View File
@@ -665,7 +665,8 @@ TEST_CASE(ble_gatt_write_test_long_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
ble_hs_test_util_tx_all();
@@ -692,7 +693,8 @@ TEST_CASE(ble_gatt_write_test_long_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify that procedure completes when mbufs are available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
@@ -763,7 +765,8 @@ TEST_CASE(ble_gatt_write_test_reliable_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify the procedure proceeds after mbufs become available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
ble_hs_test_util_tx_all();
@@ -790,7 +793,8 @@ TEST_CASE(ble_gatt_write_test_reliable_oom)
TEST_ASSERT(ticks_until == BLE_GATT_RESUME_RATE_TICKS);
/* Verify that procedure completes when mbufs are available. */
os_mbuf_free_chain(oms);
rc = os_mbuf_free_chain(oms);
TEST_ASSERT_FATAL(rc == 0);
os_time_advance(ticks_until);
ble_gattc_timer();
+9 -4
View File
@@ -110,7 +110,8 @@ ble_hs_test_util_prev_tx_dequeue(void)
uint8_t pb;
int rc;
os_mbuf_free_chain(ble_hs_test_util_prev_tx_cur);
rc = os_mbuf_free_chain(ble_hs_test_util_prev_tx_cur);
TEST_ASSERT_FATAL(rc == 0);
om = ble_hs_test_util_prev_tx_dequeue_once(&hci_hdr);
if (om != NULL) {
@@ -974,7 +975,8 @@ ble_hs_test_util_l2cap_rx(uint16_t conn_handle,
if (conn != NULL) {
rc = ble_l2cap_rx(conn, hci_hdr, om, &rx_cb, &reject_cid);
} else {
os_mbuf_free_chain(om);
rc = os_mbuf_free_chain(om);
TEST_ASSERT_FATAL(rc == 0);
}
ble_hs_unlock();
@@ -2084,7 +2086,8 @@ ble_hs_test_util_read_local_flat(uint16_t attr_handle, uint16_t max_len,
*out_len = OS_MBUF_PKTLEN(om);
os_mbuf_free_chain(om);
rc = os_mbuf_free_chain(om);
TEST_ASSERT_FATAL(rc == 0);
return 0;
}
@@ -2163,6 +2166,7 @@ ble_hs_test_util_mbuf_alloc_all_but(int count)
{
struct os_mbuf *prev;
struct os_mbuf *om;
int rc;
int i;
/* Allocate all available mbufs and put them in a single chain. */
@@ -2184,7 +2188,8 @@ ble_hs_test_util_mbuf_alloc_all_but(int count)
for (i = 0; i < count; i++) {
TEST_ASSERT_FATAL(prev != NULL);
om = SLIST_NEXT(prev, om_next);
os_mbuf_free(prev);
rc = os_mbuf_free(prev);
TEST_ASSERT_FATAL(rc == 0);
prev = om;
}
+9 -4
View File
@@ -750,7 +750,8 @@ ble_l2cap_test_coc_connect(struct test_data *t)
TEST_ASSERT_FATAL(rc == ev->early_error);
if (rc != 0) {
os_mbuf_free_chain(sdu_rx);
rc = os_mbuf_free_chain(sdu_rx);
TEST_ASSERT_FATAL(rc == 0);
return;
}
@@ -953,8 +954,11 @@ ble_l2cap_test_coc_send_data(struct test_data *t)
TEST_ASSERT(rc == ev->early_error);
if (rc) {
os_mbuf_free(sdu);
os_mbuf_free(sdu_copy);
rc = os_mbuf_free(sdu);
TEST_ASSERT_FATAL(rc == 0);
rc = os_mbuf_free(sdu_copy);
TEST_ASSERT_FATAL(rc == 0);
return;
}
@@ -965,7 +969,8 @@ ble_l2cap_test_coc_send_data(struct test_data *t)
ble_hs_test_util_verify_tx_l2cap(sdu);
os_mbuf_free_chain(sdu_copy);
rc = os_mbuf_free_chain(sdu_copy);
TEST_ASSERT_FATAL(rc == 0);
}
static void