The problem is that sms_from_text returns NULL in case the
subscriber is not attached which a) leaks memory of the 
previously allocated sms and b) runs into a null ptr 
dereference in _send_sms_str().
There may be a better solution than this but this is the 
easiest way of noticing and taking action I could find 
without changing return values of sms_from_text.
---
 openbsc/src/vty_interface_layer3.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index d80f7c9..0a65eec 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -166,11 +166,6 @@ struct gsm_sms *sms_from_text(struct gsm_subscriber *receiver, const char *text)
 	if (!sms)
 		return NULL;
 
-	if (!receiver->lac) {
-		/* subscriber currently not attached, store in database? */
-		return NULL;
-	}
-
 	sms->receiver = subscr_get(receiver);
 	strncpy(sms->text, text, sizeof(sms->text)-1);
 
@@ -195,7 +190,16 @@ static int _send_sms_str(struct gsm_subscriber *receiver, char *str,
 
 	sms = sms_from_text(receiver, str);
 	sms->protocol_id = tp_pid;
-	gsm411_send_sms_subscr(receiver, sms);
+
+	if(!receiver->lac){
+		/* subscriber currently not attached, store in database */
+		if (db_sms_store(sms) != 0) {
+			LOGP(DSMS, LOGL_ERROR, "Failed to store SMS in Database\n");
+			return CMD_WARNING;
+		}
+	} else {
+		gsm411_send_sms_subscr(receiver, sms);
+	}
 
 	return CMD_SUCCESS;
 }
-- 
1.7.1