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 --- src/gsm/gsm48.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gsm/gsm48.c') diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index ea05d450..313d9a31 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -308,12 +308,12 @@ int gsm48_decode_lai(struct gsm48_loc_area_id *lai, uint16_t *mcc, int gsm48_generate_mid_from_tmsi(uint8_t *buf, uint32_t tmsi) { - uint32_t *tptr = (uint32_t *) &buf[3]; + uint32_t tmsi_be = htonl(tmsi); buf[0] = GSM48_IE_MOBILE_ID; buf[1] = GSM48_TMSI_LEN; buf[2] = 0xf0 | GSM_MI_TYPE_TMSI; - *tptr = htonl(tmsi); + memcpy(&buf[3], &tmsi_be, sizeof(tmsi_be)); return 7; } -- cgit v1.2.3