From 76afa16d049a6c83555c6e99f0cec20b00d9536c Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 13 Mar 2013 15:05:26 +0100 Subject: SMPP: Fix crash on delivery of incoming SUBMIT-SM As bsc_gsmnet is NULL at the time we call smpp_openbsc_init(), we later run into segfaults with subscribers that don't have a subscr->net set. However, we cannot delay smpp_openbsc_init() until after bsc_bootstrap_network(), as we then fail to parse the SMPP specific VTY/config file options... --- openbsc/src/libmsc/smpp_openbsc.c | 13 ++++++++----- openbsc/src/osmo-nitb/bsc_hack.c | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'openbsc/src') diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index e83fb75e9..585f93976 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -434,18 +434,16 @@ struct smsc *smsc_from_vty(struct vty *v) } /*! \brief Initialize the OpenBSC SMPP interface */ -int smpp_openbsc_init(struct gsm_network *net, uint16_t port) +int smpp_openbsc_init(void *ctx, uint16_t port) { - struct smsc *smsc = talloc_zero(net, struct smsc); + struct smsc *smsc = talloc_zero(ctx, struct smsc); int rc; - smsc->priv = net; - rc = smpp_smsc_init(smsc, port); if (rc < 0) talloc_free(smsc); - osmo_signal_register_handler(SS_SMS, smpp_sms_cb, net); + osmo_signal_register_handler(SS_SMS, smpp_sms_cb, smsc); osmo_signal_register_handler(SS_SUBSCR, smpp_subscr_cb, smsc); g_smsc = smsc; @@ -454,3 +452,8 @@ int smpp_openbsc_init(struct gsm_network *net, uint16_t port) return rc; } + +void smpp_openbsc_set_net(struct gsm_network *net) +{ + g_smsc->priv = net; +} diff --git a/openbsc/src/osmo-nitb/bsc_hack.c b/openbsc/src/osmo-nitb/bsc_hack.c index 93630ae6a..13fa1c587 100644 --- a/openbsc/src/osmo-nitb/bsc_hack.c +++ b/openbsc/src/osmo-nitb/bsc_hack.c @@ -263,7 +263,7 @@ int main(int argc, char **argv) bsc_vty_init(&log_info); #ifdef BUILD_SMPP - if (smpp_openbsc_init(bsc_gsmnet, 0) < 0) + if (smpp_openbsc_init(tall_bsc_ctx, 0) < 0) return -1; #endif @@ -279,6 +279,7 @@ int main(int argc, char **argv) rc = bsc_bootstrap_network(int_mncc_recv, config_file); if (rc < 0) exit(1); + smpp_openbsc_set_net(bsc_gsmnet); bsc_api_init(bsc_gsmnet, msc_bsc_api()); bsc_gsmnet->ctrl = controlif_setup(bsc_gsmnet, 4249); -- cgit v1.2.3