diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-05-02 15:57:53 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-02-23 22:27:37 +0100 |
commit | 5b3b66eb29cf68bdc4385d70cd75c2967ec4da96 (patch) | |
tree | fdc733a85cf5184131ff669aa3b1e49c310ebb05 | |
parent | 863af35911d05e35ac23e196dca963c9ce5b4a51 (diff) |
paging: actually verify subscriber authorization
Before this, any paging response would be accepted by the CN, without
checking the database whether the subscriber is in fact authorized.
The probability that a subscriber would be able to take unauthorized action
is slim, nevertheless checking authorization status with the database should
happen before we accept a connection.
-rw-r--r-- | openbsc/src/libmsc/gsm_subscriber.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/openbsc/src/libmsc/gsm_subscriber.c b/openbsc/src/libmsc/gsm_subscriber.c index 4f47761eb..493304b0e 100644 --- a/openbsc/src/libmsc/gsm_subscriber.c +++ b/openbsc/src/libmsc/gsm_subscriber.c @@ -136,7 +136,14 @@ int subscr_rx_paging_response(struct msgb *msg, pr = (struct gsm48_pag_resp *)gh->data; /* Secure the connection */ - return gsm48_secure_channel(conn, pr->key_seq, subscr_paging_sec_cb, NULL); + if (subscr_authorized(conn->subscr)) + return gsm48_secure_channel(conn, pr->key_seq, + subscr_paging_sec_cb, NULL); + + /* Not authorized. Failure. */ + subscr_paging_sec_cb(GSM_HOOK_RR_SECURITY, GSM_SECURITY_AUTH_FAILED, + msg, conn, NULL); + return -1; } struct subscr_request *subscr_request_channel(struct gsm_subscriber *subscr, |