libmsc: fix no return and use after free
diff --git a/openbsc/src/libmsc/ussd.c b/openbsc/src/libmsc/ussd.c
index ad838f5..97e22b8 100644
--- a/openbsc/src/libmsc/ussd.c
+++ b/openbsc/src/libmsc/ussd.c
@@ -141,7 +141,7 @@
 	struct ussd_request ussd_req;
 	struct gsm_ussd* ussdq;
 	memset(&ussd_req, 0, sizeof(ussd_req));
-	int rc;
+	int rc = 0;
 
 	switch (req->message_type) {
 	case GSM0480_MTYPE_REGISTER:
@@ -183,9 +183,11 @@
 	}
 
 	if (req->message_type == GSM0480_MTYPE_RELEASE_COMPLETE) {
-		ussd_session_free(ussdq);
 		msc_release_connection(ussdq->conn);
+		ussd_session_free(ussdq);
 	}
+
+	return rc;
 }
 
 static int ussd_sup_send_reject(struct gsm_subscriber_connection *conn,