From 3326ba7d4c046ed4dcd4946cb354e18a99e139dc Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Wed, 9 Dec 2020 22:02:55 +0100 Subject: sgsn: check for NULL of gprs_subscr_get_or_create() gprs_subscr_get_or_create() can return NULL if no memory can be allocated. Detected by the compiler on Ubuntu s390x. Signed-off-by: Steve Langasek Signed-off-by: Alexander Couzens Change-Id: I86b3652d46bdd581fe6cbab16b52395a0daaa082 --- src/sgsn/gprs_subscriber.c | 6 ++++++ src/sgsn/sgsn_vty.c | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/sgsn/gprs_subscriber.c b/src/sgsn/gprs_subscriber.c index c23b332f3..943fbc3dc 100644 --- a/src/sgsn/gprs_subscriber.c +++ b/src/sgsn/gprs_subscriber.c @@ -870,6 +870,8 @@ struct gprs_subscr *gprs_subscr_get_or_create_by_mmctx(struct sgsn_mm_ctx *mmctx if (!subscr) { subscr = gprs_subscr_get_or_create(mmctx->imsi); + if (!subscr) + return NULL; subscr->flags |= GPRS_SUBSCRIBER_FIRST_CONTACT; subscr->flags &= ~GPRS_SUBSCRIBER_ENABLE_PURGE; } @@ -893,6 +895,8 @@ int gprs_subscr_request_update_location(struct sgsn_mm_ctx *mmctx) LOGMMCTXP(LOGL_DEBUG, mmctx, "Requesting subscriber data update\n"); subscr = gprs_subscr_get_or_create_by_mmctx(mmctx); + if (!subscr) + return -ENOMEM; subscr->flags |= GPRS_SUBSCRIBER_UPDATE_LOCATION_PENDING; @@ -918,6 +922,8 @@ int gprs_subscr_request_auth_info(struct sgsn_mm_ctx *mmctx, LOGMMCTXP(LOGL_DEBUG, mmctx, "Requesting subscriber authentication info\n"); subscr = gprs_subscr_get_or_create_by_mmctx(mmctx); + if (!subscr) + return -ENOMEM; subscr->flags |= GPRS_SUBSCRIBER_UPDATE_AUTH_INFO_PENDING; diff --git a/src/sgsn/sgsn_vty.c b/src/sgsn/sgsn_vty.c index 33a652c9f..fee328e79 100644 --- a/src/sgsn/sgsn_vty.c +++ b/src/sgsn/sgsn_vty.c @@ -1020,6 +1020,10 @@ DEFUN(update_subscr_create, update_subscr_create_cmd, } subscr = gprs_subscr_get_or_create(imsi); + if (!subscr) { + vty_out(vty, "Can not create subscriber. Out of memory.%s", imsi); + return CMD_WARNING; + } subscr->keep_in_ram = 1; gprs_subscr_put(subscr); -- cgit v1.2.3