FreeCalypso > hg > fc-magnetite
view cdg3/sap/ppp.pdf @ 516:1ed9de6c90bd
src/g23m-gsm/sms/sms_for.c: bogus malloc removed
The new error handling code that was not present in TCS211 blob version
contains a malloc call that is bogus for 3 reasons:
1) The memory allocation in question is not needed in the first place;
2) libc malloc is used instead of one of the firmware's proper ways;
3) The memory allocation is made inside a function and then never freed,
i.e., a memory leak.
This bug was caught in gcc-built FreeCalypso fw projects (Citrine
and Selenite) because our gcc environment does not allow any use of
libc malloc (any reference to malloc produces a link failure),
but this code from TCS3.2 is wrong even for Magnetite: if this code
path is executed repeatedly over a long time, the many small allocations
made by this malloc call without a subsequent free will eventually
exhaust the malloc heap provided by the TMS470 environment, malloc will
start returning NULL, and the bogus code will treat it as an error.
Because the memory allocation in question is not needed at all,
the fix entails simply removing it.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 22 Jul 2018 06:04:49 +0000 |
parents | c15047b3d00d |
children |
line wrap: on
line source
;******************************************************************************** ;*** File : ppp.pdf ;*** Creation : Wed Mar 11 09:58:36 CST 2009 ;*** XSLT Processor : Apache Software Foundation / http://xml.apache.org/xalan-j / supports XSLT-Ver: 1 ;*** Copyright : (c) Texas Instruments AG, Berlin Germany 2002 ;******************************************************************************** ;*** Document Type : Service Access Point Specification ;*** Document Name : ppp ;*** Document No. : 8441.116.99.016 ;*** Document Date : 2002-10-21 ;*** Document Status: BEING_PROCESSED ;*** Document Author: STW ;******************************************************************************** PRAGMA SRC_FILE_TIME "Thu Nov 29 09:51:00 2007" PRAGMA LAST_MODIFIED "2002-10-21" PRAGMA ID_AND_VERSION "8441.116.99.016" CONST PPP_LOGIN_NAME_LENGTH 33 ; Length of login name CONST PPP_PASSWORD_LENGTH 25 ; Length of password EXTERN CONST @p_gsmcom - PPP_ORIGINATING_ENTITY@ PPP_ORIGINATING_ENTITY ; mask for indicating the originating entity of a cause is PPP VALTAB VAL_mru VAL 1500 PPP_MRU_DEFAULT "default value for mru" VALTAB VAL_ap VAL 0 PPP_AP_NO "no authentication" VAL 1 PPP_AP_PAP "password authentication protocol" VAL 2 PPP_AP_CHAP "challenge handshake authentication protocol" VAL 3 PPP_AP_AUTO "automatic authentication" VALTAB VAL_accm VAL 0xFFFFFFFF PPP_ACCM_DEFAULT "default value for accm" VAL 0x00000000 PPP_ACCM_OFF "disable control character mapping" VALTAB VAL_rt VAL 3 PPP_RT_DEFAULT "default value for restart timer" VALTAB VAL_mc VAL 10 PPP_MC_DEFAULT "default value for max configure" VALTAB VAL_mt VAL 2 PPP_MT_DEFAULT "default value for max terminate" VALTAB VAL_mf VAL 5 PPP_MF_DEFAULT "default value for max failure" VALTAB VAL_ppp_cause VAL 0b1100111100000001 PPP_TERM_OK_MMI "successful terminated (MMI initiated)" VAL 0b1100111100000010 PPP_TERM_OK_PEER "successful terminated (PPP peer initiated)" VAL 0b1100111100000011 PPP_TERM_NO_RESPONSE "no response from the PPP peer" VAL 0b1100111100000100 PPP_TERM_LOOP_BACK "looped-back link detected" VAL 0b1100111100000101 PPP_TERM_LCP_NOT_CONVERGE "LCP configuration is not converging" VAL 0b1100111100000110 PPP_TERM_IPCP_NOT_CONVERGE "IPCP configuration is not converging" VAL 0b1100111100000111 PPP_TERM_IPCP_NOT_STARTED "PPP peer did not start IPCP configuration" VAL 0b1100111100001000 PPP_TERM_NO_CHANNEL "can not open communication channels" VAL 0b1100111100001001 PPP_TERM_PROT_REJ_UNEXPECTED "unexpected Protocol Rejection from PPP peer" VAL 0b1100111100001010 PPP_TERM_USE_AUTHED_FAILED "user authentication failed" VAL 0b1100111100001011 PPP_TERM_PROT_ERROR_UNSPEC "unspecified protocol error" VALTAB VAL_ppp_hc VAL 0 PPP_HC_OFF "no header compression" VAL 1 PPP_HC_VJ "Van Jacobson header compression" VALTAB VAL_ip VAL 0x00000000 PPP_IP_DYNAMIC "dynaminc IP address negotiation" VALTAB VAL_dns1 VAL 0x00000000 PPP_DNS1_DYNAMIC "dynaminc primary DNS server address negotiation" VALTAB VAL_dns2 VAL 0x00000000 PPP_DNS2_DYNAMIC "dynaminc secondary DNS server address negotiation" VALTAB VAL_mode VAL 0 PPP_CLIENT "start PPP as client" VAL 1 PPP_SERVER "start PPP as server" VAL 2 PPP_TRANSPARENT "start PPP in transparent mode" VALTAB VAL_lower_layer VAL 0 PPP_LOWER_LAYER_DOWN "lower layer is not available" VAL 1 PPP_LOWER_LAYER_UP "lower layer is available" VALTAB VAL_connected_direction VAL 0 PPP_DTI_CONN_PEER "DTI channel is connected to Peer Layer" VAL 1 PPP_DTI_CONN_PROT "DTI channel is connected to Protocol Layer" VAR mru "maximum receive unit" S VAL @p_ppp - VAL_mru@ VAR ap "authentication protocol" B VAL @p_ppp - VAL_ap@ VAR accm "async control character map" L VAL @p_ppp - VAL_accm@ VAR rt "restart timer" B VAL @p_ppp - VAL_rt@ VAR mc "max configure" B VAL @p_ppp - VAL_mc@ VAR mt "max terminate" B VAL @p_ppp - VAL_mt@ VAR mf "max failure" B VAL @p_ppp - VAL_mf@ VAR ppp_cause "PPP error cause" S VAL @p_ppp - VAL_ppp_cause@ VAR ppp_hc "header compression of PPP connection" B VAL @p_ppp - VAL_ppp_hc@ VAR msid "max slot identifier" B VAR l_buf "length of content in bit" S VAR o_buf "offset of content in bit" S VAR Buf "protocol configuration options" B VAR peer_entity "PPP-peer communication channel name value" B VAR protocol_entity "network protocol communication channel name value" B VAR name_len "length of name" B VAR name "login name" B VAR password_len "length of password" B VAR password "login password" B VAR ip "Internet Protocol address" L VAL @p_ppp - VAL_ip@ VAR dns1 "primary DNS server address" L VAL @p_ppp - VAL_dns1@ VAR dns2 "secondary DNS server address" L VAL @p_ppp - VAL_dns2@ VAR mode "working mode" B VAL @p_ppp - VAL_mode@ VAR lower_layer "status of lower layer" B VAL @p_ppp - VAL_lower_layer@ VAR peer_direction "Direction for the Peer Layer" B VAR prot_direction "Direction for the Protocol Layer" B VAR peer_link_id "Link Id to Peer Layer" L VAR prot_link_id "Link Id to Protocol Layer" L VAR connected_direction "DTI direction" B VAL @p_ppp - VAL_connected_direction@ COMP sdu "list of protocol configuration options" { l_buf ; length of content in bit o_buf ; offset of content in bit Buf [1] ; protocol configuration options } COMP peer_channel "PPP-peer communication channel name" { peer_entity [6] ; PPP-peer communication channel name value } COMP protocol_channel "network protocol communication channel name" { protocol_entity [6] ; network protocol communication channel name value } COMP login "authentication values" { name_len ; length of name name [PPP_LOGIN_NAME_LENGTH] ; login name password_len ; length of password password [PPP_PASSWORD_LENGTH] ; login password } ; PPP_ESTABLISH_REQ 0x7500 ; PPP_ESTABLISH_CNF 0x3500 ; PPP_TERMINATE_REQ 0x7501 ; PPP_TERMINATE_IND 0x3501 ; PPP_PDP_ACTIVATE_IND 0x3502 ; PPP_PDP_ACTIVATE_RES 0x7502 ; PPP_PDP_ACTIVATE_REJ 0x7503 ; PPP_MODIFICATION_REQ 0x7504 ; PPP_MODIFICATION_CNF 0x3503 ; PPP_DTI_CONNECTED_IND 0x3504 ; NEW_POWER_STATUS 0x7505 PRIM PPP_ESTABLISH_REQ 0x7500 { mode ; working mode mru ; maximum receive unit ap ; authentication protocol login ; authentication values accm ; async control character map rt ; restart timer mc ; max configure mt ; max terminate mf ; max failure ppp_hc ; header compression of PPP connection ip ; Internet Protocol address dns1 ; primary DNS server address dns2 ; secondary DNS server address peer_channel ; PPP-peer communication channel name protocol_channel ; network protocol communication channel name peer_direction ; direction of PPP peer communication channel prot_direction ; direction of PPP protocol communication channel peer_link_id ; link id for peer channel prot_link_id ; link id for protocol channel } PRIM PPP_ESTABLISH_CNF 0x3500 { mru ; maximum receive unit ppp_hc ; header compression of PPP connection msid ; max slot identifier ip ; Internet Protocol address dns1 ; primary DNS server address dns2 ; secondary DNS server address } PRIM PPP_TERMINATE_REQ 0x7501 { lower_layer ; status of lower layer } PRIM PPP_TERMINATE_IND 0x3501 { ppp_cause ; PPP error cause } PRIM PPP_PDP_ACTIVATE_IND 0x3502 { ppp_hc ; header compression of PPP connection msid ; max slot identifier sdu ; list of protocol configuration options } PRIM PPP_PDP_ACTIVATE_RES 0x7502 { ppp_hc ; header compression of PPP connection msid ; max slot identifier ip ; Internet Protocol address sdu ; list of protocol configuration options } PRIM PPP_PDP_ACTIVATE_REJ 0x7503 { ppp_cause ; PPP error cause } PRIM PPP_MODIFICATION_REQ 0x7504 { ppp_hc ; header compression of PPP connection msid ; max slot identifier } PRIM PPP_MODIFICATION_CNF 0x3503 { ppp_hc ; header compression of PPP connection msid ; max slot identifier } PRIM PPP_DTI_CONNECTED_IND 0x3504 { connected_direction ; connection DTI channel direction } PRIM NEW_POWER_STATUS 0x7505 { }