[PATCH 3/5] LC15: fix segfault

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

msuraev at sysmocom.de msuraev at sysmocom.de
Tue Mar 22 14:40:10 UTC 2016


From: Max <msuraev at sysmocom.de>

Add null pointer check and propagate error.
---
 include/osmo-bts/phy_link.h     | 5 ++++-
 src/osmo-bts-litecell15/l1_if.c | 6 ++++++
 src/osmo-bts-litecell15/l1_if.h | 6 ++++--
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/include/osmo-bts/phy_link.h b/include/osmo-bts/phy_link.h
index a559aa3..5ab5d49 100644
--- a/include/osmo-bts/phy_link.h
+++ b/include/osmo-bts/phy_link.h
@@ -125,7 +125,10 @@ void phy_user_statechg_notif(struct phy_instance *pinst, enum phy_link_state lin
 
 static inline struct phy_instance *trx_phy_instance(struct gsm_bts_trx *trx)
 {
-	return trx->role_bts.l1h;
+	if (trx)
+		return trx->role_bts.l1h;
+
+	return NULL;
 }
 
 int bts_model_phy_link_open(struct phy_link *plink);
diff --git a/src/osmo-bts-litecell15/l1_if.c b/src/osmo-bts-litecell15/l1_if.c
index f625968..d89cc29 100644
--- a/src/osmo-bts-litecell15/l1_if.c
+++ b/src/osmo-bts-litecell15/l1_if.c
@@ -1242,6 +1242,12 @@ static int reset_compl_cb(struct gsm_bts_trx *trx, struct msgb *resp,
 	Litecell15_Prim_t *sysp = msgb_sysprim(resp);
 	GsmL1_Status_t status = sysp->u.layer1ResetCnf.status;
 
+	if (!fl1h) {
+		LOGP(DL1C, LOGL_ERROR, "reset_compl_cb() is unable to get fl1h"
+		     " from trx\n");
+		return 1;
+	}
+
 	LOGP(DL1C, LOGL_NOTICE, "Rx L1-RESET.conf (status=%s)\n",
 		get_value_string(lc15bts_l1status_names, status));
 
diff --git a/src/osmo-bts-litecell15/l1_if.h b/src/osmo-bts-litecell15/l1_if.h
index 0c8843b..773840d 100644
--- a/src/osmo-bts-litecell15/l1_if.h
+++ b/src/osmo-bts-litecell15/l1_if.h
@@ -117,8 +117,10 @@ int l1if_ms_pwr_ctrl(struct gsm_lchan *lchan, const int uplink_target,
 static inline struct lc15l1_hdl *trx_lc15l1_hdl(struct gsm_bts_trx *trx)
 {
 	struct phy_instance *pinst = trx_phy_instance(trx);
-	OSMO_ASSERT(pinst);
-	return pinst->u.lc15.hdl;
+	if (pinst)
+		return pinst->u.lc15.hdl;
+
+	return NULL;
 }
 
 static inline struct gsm_bts_trx *lc15l1_hdl_trx(struct lc15l1_hdl *fl1h)
-- 
2.7.4




More information about the OpenBSC mailing list