diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2013-06-20 10:42:57 +0200 |
---|---|---|
committer | Steve Markgraf <steve@steve-m.de> | 2021-10-23 18:51:19 +0200 |
commit | 1df0b450c19073753c85fea60aad699a53384207 (patch) | |
tree | add278f12af627f4d057cfc53b545e2bc1e952ce | |
parent | 102c1b5f30781057b9ddf45fafa5a8b60443cb69 (diff) |
host/transceiver: Fix leak in AB processing codepath
Thanks to Andreas for pointing this out
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r-- | src/host/layer23/src/transceiver/demod.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/host/layer23/src/transceiver/demod.c b/src/host/layer23/src/transceiver/demod.c index c7a2d15f..d21f112f 100644 --- a/src/host/layer23/src/transceiver/demod.c +++ b/src/host/layer23/src/transceiver/demod.c @@ -24,6 +24,8 @@ #include <stdio.h> #include <stdint.h> #include <string.h> +#include <stdlib.h> +#include <errno.h> #include <osmocom/dsp/cxvec.h> #include <osmocom/dsp/cxvec_math.h> @@ -65,16 +67,20 @@ gsm_ab_ind_process(struct app_state *as, goto err; /* Check for a significant peak */ - if (cabsf(chan) < 0.5) + if (cabsf(chan) < 0.5) { + rv = -EINVAL; goto err; + } printf("TOA : %f\n", toa); printf("chan : (%f %f) => %f\n", crealf(chan), cimagf(chan), cabsf(chan)); /* Demodulate */ bits = gsm_ab_demodulate(as->gs, burst, chan, toa); - if (!bits) + if (!bits) { + rv = -ENOMEM; goto err; + } /* Copy */ memset(data, 0x00, 148); @@ -87,8 +93,12 @@ gsm_ab_ind_process(struct app_state *as, *toa_p = toa; - return 0; + rv = 0; + /* Cleanup */ err: - return -1; + free(bits); + osmo_cxvec_free(burst); + + return rv; } |