aboutsummaryrefslogtreecommitdiffstats
path: root/include/osmo-bts
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-10-03 05:00:49 +0600
committerlaforge <laforge@osmocom.org>2021-10-08 05:23:08 +0000
commit7726d2332713023a1e7b58bd5837e20160b029df (patch)
tree18ee3d82e7495722b36dc8ec30ebcee3fc63c6e6 /include/osmo-bts
parent2e62159c8dc222e67e6e37e63374936592ceacf7 (diff)
rsl: prevent race condition during timeslot re-configuration
It may happen that the BSC requests logical channel activation on a dynamic timeslot, which is in a process of switching from one pchan type to another due to a preceding channel activation request. In this case 'struct gsm_bts_trx_ts' already holds an msgb with the preceding RSL CHANnel ACTIVation message, that is normally handled once the PHY completes the process of timeslot re-configuration. On receipt of subsequent RSL CHANnel ACTIVation messages, in function dyn_ts_l1_reconnect() we overwrite the preceeding msgb (memleak), by the most recent one. And once the timeslot re-configuration is done, only the most recent CHANnel ACTIVation message gets ACKed. In order to avoid this, let's move the msgb ownership to 'struct gsm_lchan', so it cannot be overwritten by the CHANnel ACTIVation message that is related to a different lchan on the same timeslot. Change-Id: Ia625c2827fca883ea712076706d5ef21ed793ba6 Related: I3b602ac9dbe0ab3e80eb30de573c9b48a79872d8 Fixes: OS#5245
Diffstat (limited to 'include/osmo-bts')
-rw-r--r--include/osmo-bts/gsm_data.h1
-rw-r--r--include/osmo-bts/lchan.h2
2 files changed, 2 insertions, 1 deletions
diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index ad0f78d4..dcb357f1 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -83,7 +83,6 @@ struct gsm_bts_trx_ts {
struct {
enum gsm_phys_chan_config pchan_is;
enum gsm_phys_chan_config pchan_want;
- struct msgb *pending_chan_activ;
} dyn;
unsigned int flags;
diff --git a/include/osmo-bts/lchan.h b/include/osmo-bts/lchan.h
index 4cf957ab..fdb3144c 100644
--- a/include/osmo-bts/lchan.h
+++ b/include/osmo-bts/lchan.h
@@ -278,6 +278,8 @@ struct gsm_lchan {
int s;
/* Kind of the release/activation. E.g. RSL or PCU */
enum lchan_rel_act_kind rel_act_kind;
+ /* Pending RSL CHANnel ACTIVation message */
+ struct msgb *pending_chan_activ;
/* RTP header Marker bit to indicate beginning of speech after pause */
bool rtp_tx_marker;