[1/4] libmsc: Use RAND_bytes when choosing a tmsi
diff mbox

Message ID 4535ddc5c828125fe8df7ee0e415413d742b66c7.1444298449.git.daniel@totalueberwachung.de
State Accepted
Headers show

Commit Message

Daniel Willmann Oct. 8, 2015, 2:10 p.m. UTC
From: Daniel Willmann <dwillmann@sysmocom.de>

Require openssl version to be >= 0.9.5 because we rely on the RAND_bytes
return value.
---
 openbsc/configure.ac              | 2 +-
 openbsc/src/libmsc/Makefile.am    | 2 +-
 openbsc/src/libmsc/db.c           | 7 ++++++-
 openbsc/src/osmo-nitb/Makefile.am | 2 +-
 openbsc/tests/channel/Makefile.am | 2 +-
 openbsc/tests/db/Makefile.am      | 2 +-
 6 files changed, 11 insertions(+), 6 deletions(-)

Comments

Holger Freyther Oct. 12, 2015, 7:01 a.m. UTC | #1
> On 08 Oct 2015, at 16:10, Daniel Willmann <dwilllmann@sysmocom.de> wrote:
> 
> 
> 	for (;;) {
> -		subscriber->tmsi = rand();
> +		if (RAND_bytes(&subscriber->tmsi, sizeof(subscriber->tmsi)) != 1) {
> +			LOGP(DDB, LOGL_ERROR, "RAND_bytes failed\n");


db.c:1199:18: warning: passing argument 1 of ‘RAND_bytes’ from incompatible pointer type
   if (RAND_bytes(&subscriber->tmsi, sizeof(subscriber->tmsi)) != 1) {


:}

Patch
diff mbox

diff --git a/openbsc/configure.ac b/openbsc/configure.ac
index 78302dd..fc30b5e 100644
--- a/openbsc/configure.ac
+++ b/openbsc/configure.ac
@@ -27,13 +27,13 @@  PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 0.7.0)
 PKG_CHECK_MODULES(LIBOSMOABIS, libosmoabis >= 0.2.0)
 PKG_CHECK_MODULES(LIBOSMOGB, libosmogb >= 0.6.4)
 PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.0.1)
+PKG_CHECK_MODULES(LIBCRYPTO, libcrypto >= 0.9.5)
 
 # Enabke/disable the NAT?
 AC_ARG_ENABLE([nat], [AS_HELP_STRING([--enable-nat], [Build the BSC NAT. Requires SCCP])],
     [osmo_ac_build_nat="$enableval"],[osmo_ac_build_nat="no"])
 if test "$osmo_ac_build_nat" = "yes" ; then
         PKG_CHECK_MODULES(LIBOSMOSCCP, libosmo-sccp >= 0.0.2)
-        PKG_CHECK_MODULES(LIBCRYPTO, libcrypto)
 fi
 AM_CONDITIONAL(BUILD_NAT, test "x$osmo_ac_build_nat" = "xyes")
 AC_SUBST(osmo_ac_build_nat)
diff --git a/openbsc/src/libmsc/Makefile.am b/openbsc/src/libmsc/Makefile.am
index aa7d8ae..18bfa0c 100644
--- a/openbsc/src/libmsc/Makefile.am
+++ b/openbsc/src/libmsc/Makefile.am
@@ -1,6 +1,6 @@ 
 AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
 AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) \
-	$(LIBOSMOABIS_CFLAGS) $(COVERAGE_CFLAGS)
+	$(LIBOSMOABIS_CFLAGS) $(COVERAGE_CFLAGS) $(LIBCRYPTO_CFLAGS)
 
 noinst_HEADERS = meas_feed.h
 
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c
index 035202d..faae982 100644
--- a/openbsc/src/libmsc/db.c
+++ b/openbsc/src/libmsc/db.c
@@ -38,6 +38,8 @@ 
 #include <osmocom/core/statistics.h>
 #include <osmocom/core/rate_ctr.h>
 
+#include <openssl/rand.h>
+
 /* Semi-Private-Interface (SPI) for the subscriber code */
 void subscr_direct_free(struct gsm_subscriber *subscr);
 
@@ -1194,7 +1196,10 @@  int db_subscriber_alloc_tmsi(struct gsm_subscriber *subscriber)
 	char *tmsi_quoted;
 
 	for (;;) {
-		subscriber->tmsi = rand();
+		if (RAND_bytes(&subscriber->tmsi, sizeof(subscriber->tmsi)) != 1) {
+			LOGP(DDB, LOGL_ERROR, "RAND_bytes failed\n");
+			return 1;
+		}
 		if (subscriber->tmsi == GSM_RESERVED_TMSI)
 			continue;
 
diff --git a/openbsc/src/osmo-nitb/Makefile.am b/openbsc/src/osmo-nitb/Makefile.am
index 57a9284..d3b97f8 100644
--- a/openbsc/src/osmo-nitb/Makefile.am
+++ b/openbsc/src/osmo-nitb/Makefile.am
@@ -16,4 +16,4 @@  osmo_nitb_LDADD = \
 		$(top_builddir)/src/libcommon/libcommon.a \
 		-ldbi $(LIBCRYPT)				   \
 		$(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOCORE_LIBS)  \
-		$(LIBOSMOCTRL_LIBS) $(LIBOSMOABIS_LIBS) $(LIBSMPP34_LIBS)
+		$(LIBOSMOCTRL_LIBS) $(LIBOSMOABIS_LIBS) $(LIBSMPP34_LIBS) $(LIBCRYPTO_LIBS)
diff --git a/openbsc/tests/channel/Makefile.am b/openbsc/tests/channel/Makefile.am
index 519efbd..51b2f83 100644
--- a/openbsc/tests/channel/Makefile.am
+++ b/openbsc/tests/channel/Makefile.am
@@ -11,4 +11,4 @@  channel_test_LDADD = \
 	$(top_builddir)/src/libmsc/libmsc.a \
 	$(top_builddir)/src/libcommon/libcommon.a \
 	$(LIBOSMOCORE_LIBS) \
-	-ldbi $(LIBOSMOGSM_LIBS)
+	-ldbi $(LIBOSMOGSM_LIBS) $(LIBCRYPTO_LIBS)
diff --git a/openbsc/tests/db/Makefile.am b/openbsc/tests/db/Makefile.am
index 647b519..be3af5f 100644
--- a/openbsc/tests/db/Makefile.am
+++ b/openbsc/tests/db/Makefile.am
@@ -13,5 +13,5 @@  db_test_LDADD =	$(top_builddir)/src/libbsc/libbsc.a \
 		$(top_builddir)/src/libtrau/libtrau.a \
 		$(top_builddir)/src/libcommon/libcommon.a \
 		$(LIBOSMOCORE_LIBS) $(LIBOSMOABIS_LIBS) \
-		$(LIBOSMOGSM_LIBS) $(LIBSMPP34_LIBS) $(LIBOSMOVTY_LIBS) -ldbi
+		$(LIBOSMOGSM_LIBS) $(LIBSMPP34_LIBS) $(LIBOSMOVTY_LIBS) $(LIBCRYPTO_LIBS) -ldbi