gsup_client: move ownership of the msg buffer into struct resp
The resp is already referencing data inside the msg buffer. It should take the ownership of the incoming message and the caller must take care of it.
This commit is contained in:
parent
44e23b2a45
commit
d56bf7cf73
|
@ -600,6 +600,7 @@ static bool on_recv_pdu(void *data, osmo_epdg_ipa_client_t *client, struct msgb
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resp->pdu = pdu;
|
||||||
DBG1(DBG_NET, "epdg: gsupc: receive gsup message %s/%d",
|
DBG1(DBG_NET, "epdg: gsupc: receive gsup message %s/%d",
|
||||||
resp->gsup.imsi, resp->gsup.message_type);
|
resp->gsup.imsi, resp->gsup.message_type);
|
||||||
|
|
||||||
|
@ -646,7 +647,6 @@ static bool on_recv_pdu(void *data, osmo_epdg_ipa_client_t *client, struct msgb
|
||||||
DBG1(DBG_NET, "epdg: gsupc: received unknown message type %02x", resp->gsup.message_type);
|
DBG1(DBG_NET, "epdg: gsupc: received unknown message type %02x", resp->gsup.message_type);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
free(pdu);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -32,9 +32,26 @@
|
||||||
|
|
||||||
struct osmo_epdg_gsup_response_t {
|
struct osmo_epdg_gsup_response_t {
|
||||||
struct osmo_gsup_message gsup;
|
struct osmo_gsup_message gsup;
|
||||||
|
/* keep pdu around because gsup takes ownership of data out of pdu */
|
||||||
|
struct msgb *pdu;
|
||||||
};
|
};
|
||||||
typedef struct osmo_epdg_gsup_response_t osmo_epdg_gsup_response_t;
|
typedef struct osmo_epdg_gsup_response_t osmo_epdg_gsup_response_t;
|
||||||
|
|
||||||
|
static inline void osmo_epdg_gsup_resp_free(osmo_epdg_gsup_response_t *resp)
|
||||||
|
{
|
||||||
|
if (!resp)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resp->pdu)
|
||||||
|
{
|
||||||
|
free(resp->pdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(resp);
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct osmo_epdg_gsup_client_t osmo_epdg_gsup_client_t;
|
typedef struct osmo_epdg_gsup_client_t osmo_epdg_gsup_client_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -84,7 +84,7 @@ METHOD(listener_t, eap_authorize, bool,
|
||||||
}
|
}
|
||||||
ue->set_state(ue, UE_LOCATION_UPDATED);
|
ue->set_state(ue, UE_LOCATION_UPDATED);
|
||||||
ue->put(ue);
|
ue->put(ue);
|
||||||
free(resp);
|
osmo_epdg_gsup_resp_free(resp);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
@ -95,10 +95,7 @@ err:
|
||||||
ue->put(ue);
|
ue->put(ue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp)
|
osmo_epdg_gsup_resp_free(resp);
|
||||||
{
|
|
||||||
free(resp);
|
|
||||||
}
|
|
||||||
/* keep still subscribed */
|
/* keep still subscribed */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -195,15 +192,11 @@ METHOD(listener_t, authorize, bool,
|
||||||
ue->put(ue);
|
ue->put(ue);
|
||||||
|
|
||||||
address->destroy(address);
|
address->destroy(address);
|
||||||
free(resp);
|
osmo_epdg_gsup_resp_free(resp);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
osmo_epdg_gsup_resp_free(resp);
|
||||||
if (resp)
|
|
||||||
{
|
|
||||||
free(resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ue)
|
if (ue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -112,14 +112,15 @@ METHOD(simaka_provider_t, get_quintuplet, bool,
|
||||||
if (resp->gsup.message_type != OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT)
|
if (resp->gsup.message_type != OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT)
|
||||||
{
|
{
|
||||||
DBG1(DBG_NET, "epdg_provider: SendAuthInfo Error! Cause: %02x", resp->gsup.cause);
|
DBG1(DBG_NET, "epdg_provider: SendAuthInfo Error! Cause: %02x", resp->gsup.cause);
|
||||||
return FALSE;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct osmo_auth_vector *auth = &resp->gsup.auth_vectors[0];
|
struct osmo_auth_vector *auth = &resp->gsup.auth_vectors[0];
|
||||||
if (resp->gsup.num_auth_vectors == 0)
|
if (resp->gsup.num_auth_vectors == 0)
|
||||||
{
|
{
|
||||||
/* TODO: invalid auth data received */
|
/* TODO: invalid auth data received */
|
||||||
return FALSE;
|
DBG1(DBG_NET, "epdg_provider: SendAuthInfo Invalid Auth Received!");
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(rand, auth->rand, AKA_RAND_LEN);
|
memcpy(rand, auth->rand, AKA_RAND_LEN);
|
||||||
|
@ -129,8 +130,11 @@ METHOD(simaka_provider_t, get_quintuplet, bool,
|
||||||
memcpy(xres, auth->res, auth->res_len);
|
memcpy(xres, auth->res, auth->res_len);
|
||||||
*xres_len = auth->res_len;
|
*xres_len = auth->res_len;
|
||||||
|
|
||||||
free(resp);
|
osmo_epdg_gsup_resp_free(resp);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
err:
|
||||||
|
osmo_epdg_gsup_resp_free(resp);
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(simaka_provider_t, resync, bool,
|
METHOD(simaka_provider_t, resync, bool,
|
||||||
|
|
Loading…
Reference in New Issue