mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 04:04:31 +02:00
components/bt: Fix SPP using NULL point with dynamic memory
This commit is contained in:
@@ -66,9 +66,11 @@ typedef struct {
|
|||||||
|
|
||||||
#if SPP_DYNAMIC_MEMORY == FALSE
|
#if SPP_DYNAMIC_MEMORY == FALSE
|
||||||
static spp_local_param_t spp_local_param;
|
static spp_local_param_t spp_local_param;
|
||||||
|
#define is_spp_init() (spp_local_param.spp_slot_mutex != NULL)
|
||||||
#else
|
#else
|
||||||
static spp_local_param_t *spp_local_param_ptr;
|
static spp_local_param_t *spp_local_param_ptr;
|
||||||
#define spp_local_param (*spp_local_param_ptr)
|
#define spp_local_param (*spp_local_param_ptr)
|
||||||
|
#define is_spp_init() (&spp_local_param != NULL && spp_local_param.spp_slot_mutex != NULL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void spp_osi_free(void *p)
|
static void spp_osi_free(void *p)
|
||||||
@@ -189,7 +191,7 @@ static void *btc_spp_rfcomm_inter_cb(tBTA_JV_EVT event, tBTA_JV *p_data, void *u
|
|||||||
|
|
||||||
uint32_t id = (uintptr_t)user_data;
|
uint32_t id = (uintptr_t)user_data;
|
||||||
spp_slot_t *slot, *slot_new;
|
spp_slot_t *slot, *slot_new;
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_WARNING("%s SPP have been deinit, incoming events ignore!\n", __func__);
|
BTC_TRACE_WARNING("%s SPP have been deinit, incoming events ignore!\n", __func__);
|
||||||
return new_user_data;
|
return new_user_data;
|
||||||
}
|
}
|
||||||
@@ -363,7 +365,7 @@ static void btc_spp_dm_inter_cb(tBTA_JV_EVT event, tBTA_JV *p_data, void *user_d
|
|||||||
|
|
||||||
static void btc_spp_init(btc_spp_args_t *arg)
|
static void btc_spp_init(btc_spp_args_t *arg)
|
||||||
{
|
{
|
||||||
if (spp_local_param.spp_slot_mutex) {
|
if (is_spp_init()) {
|
||||||
esp_spp_cb_param_t param;
|
esp_spp_cb_param_t param;
|
||||||
param.init.status = ESP_SPP_FAILURE;
|
param.init.status = ESP_SPP_FAILURE;
|
||||||
btc_spp_cb_to_app(ESP_SPP_INIT_EVT, ¶m);
|
btc_spp_cb_to_app(ESP_SPP_INIT_EVT, ¶m);
|
||||||
@@ -391,7 +393,7 @@ static void btc_spp_init(btc_spp_args_t *arg)
|
|||||||
static void btc_spp_uninit(void)
|
static void btc_spp_uninit(void)
|
||||||
{
|
{
|
||||||
esp_spp_cb_param_t param;
|
esp_spp_cb_param_t param;
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
param.uninit.status = ESP_SPP_FAILURE;
|
param.uninit.status = ESP_SPP_FAILURE;
|
||||||
btc_spp_cb_to_app(ESP_SPP_UNINIT_EVT, ¶m);
|
btc_spp_cb_to_app(ESP_SPP_UNINIT_EVT, ¶m);
|
||||||
BTC_TRACE_ERROR("%s SPP has not been initiated, shall init first!", __func__);
|
BTC_TRACE_ERROR("%s SPP has not been initiated, shall init first!", __func__);
|
||||||
@@ -436,7 +438,7 @@ static void btc_spp_uninit(void)
|
|||||||
|
|
||||||
static void btc_spp_start_discovery(btc_spp_args_t *arg)
|
static void btc_spp_start_discovery(btc_spp_args_t *arg)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -445,7 +447,7 @@ static void btc_spp_start_discovery(btc_spp_args_t *arg)
|
|||||||
|
|
||||||
static void btc_spp_connect(btc_spp_args_t *arg)
|
static void btc_spp_connect(btc_spp_args_t *arg)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -467,7 +469,7 @@ static void btc_spp_connect(btc_spp_args_t *arg)
|
|||||||
|
|
||||||
static void btc_spp_disconnect(btc_spp_args_t *arg)
|
static void btc_spp_disconnect(btc_spp_args_t *arg)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -484,7 +486,7 @@ static void btc_spp_disconnect(btc_spp_args_t *arg)
|
|||||||
|
|
||||||
static void btc_spp_start_srv(btc_spp_args_t *arg)
|
static void btc_spp_start_srv(btc_spp_args_t *arg)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -506,7 +508,7 @@ static void btc_spp_start_srv(btc_spp_args_t *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void btc_spp_stop_srv(void) {
|
static void btc_spp_stop_srv(void) {
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -549,7 +551,7 @@ static void btc_spp_stop_srv(void) {
|
|||||||
|
|
||||||
static void btc_spp_write(btc_spp_args_t *arg)
|
static void btc_spp_write(btc_spp_args_t *arg)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -869,7 +871,7 @@ int bta_co_rfc_data_incoming(void *user_data, BT_HDR *p_buf)
|
|||||||
msg.act = BTA_JV_RFCOMM_DATA_IND_EVT;
|
msg.act = BTA_JV_RFCOMM_DATA_IND_EVT;
|
||||||
|
|
||||||
uint32_t id = (uintptr_t)user_data;
|
uint32_t id = (uintptr_t)user_data;
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -919,7 +921,7 @@ int bta_co_rfc_data_outgoing(void *user_data, uint8_t *buf, uint16_t size)
|
|||||||
|
|
||||||
static ssize_t spp_vfs_write(int fd, const void * data, size_t size)
|
static ssize_t spp_vfs_write(int fd, const void * data, size_t size)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -942,7 +944,7 @@ static ssize_t spp_vfs_write(int fd, const void * data, size_t size)
|
|||||||
}
|
}
|
||||||
static int spp_vfs_close(int fd)
|
static int spp_vfs_close(int fd)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -974,7 +976,7 @@ static bool incoming_list_2_ringbuf_read(spp_slot_t *slot)
|
|||||||
|
|
||||||
static ssize_t spp_vfs_read(int fd, void * dst, size_t size)
|
static ssize_t spp_vfs_read(int fd, void * dst, size_t size)
|
||||||
{
|
{
|
||||||
if (!spp_local_param.spp_slot_mutex) {
|
if (!is_spp_init()) {
|
||||||
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
BTC_TRACE_ERROR("%s SPP have not been init\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user