From cd252e356556e28cfc72d66f82fa87d12f3e5a2a Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 3 Jul 2013 09:56:53 +0200 Subject: gsm0408: Avoid unaligned memory access in gsm48_generate_mid_from_tmsi The &buf[3] is unlikely to be aligned properly. Use memcpy instead of an assignment. Add a small testcase that verifies that I didn't mess up the conversion. Alignment trap: osmo-nitb (3293) PC=0x492b7094 Instr=0xe5803003 Address=0xbeb259db FSR 0x801 --- tests/gsm0408/gsm0408_test.c | 23 +++++++++++++++++++++++ tests/gsm0408/gsm0408_test.ok | 1 + 2 files changed, 24 insertions(+) (limited to 'tests/gsm0408') diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index 077063be..b469b307 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -20,10 +20,13 @@ #include #include +#include #include #include +#include #include +#include #include #include @@ -127,7 +130,27 @@ static int test_bearer_cap() return 0; } +static void test_mid_from_tmsi(void) +{ + static const uint8_t res[] = { 0x17, 0x05, 0xf4, 0xaa, 0xbb, 0xcc, 0xdd }; + + + uint32_t tmsi = 0xAABBCCDD; + uint8_t buf[3 + sizeof(uint32_t)]; + + printf("Simple TMSI encoding test...."); + + memset(&buf, 0xFE, sizeof(buf)); + gsm48_generate_mid_from_tmsi(buf, tmsi); + + OSMO_ASSERT(memcmp(buf, res, sizeof(res)) == 0); + printf("passed\n"); +} + int main(int argc, char **argv) { test_bearer_cap(); + test_mid_from_tmsi(); + + return EXIT_SUCCESS; } diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 5ce19e63..4a6d78b9 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -1,2 +1,3 @@ Test `CSD 9600/V.110/transparent' passed Test `Speech, all codecs' passed +Simple TMSI encoding test....passed -- cgit v1.2.3