summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-06-20 10:42:57 +0200
committerSteve Markgraf <steve@steve-m.de>2021-10-23 18:51:19 +0200
commit1df0b450c19073753c85fea60aad699a53384207 (patch)
treeadd278f12af627f4d057cfc53b545e2bc1e952ce
parent102c1b5f30781057b9ddf45fafa5a8b60443cb69 (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.c18
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;
}