aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-01-02 20:46:51 +0100
committerHarald Welte <laforge@osmocom.org>2021-01-03 14:18:58 +0100
commit64b9407c4e3cefaeff2b76b8e4ce3f8d55b5986a (patch)
tree295ca604023b4f984ae61d65b44505970e5b605e
parent5a3eb5d99ae2dc65f17730d0e0264d7610a5efad (diff)
cbsp: Fix encoding of "ETWS Warning Security Info" IE
This is a fixed-length Tag-Value IE. Our decoder already parsed it correctly, but the encoder encoded it as TLV, which is wrong. Change-Id: I7e1d7eab8b8e51acd9a24c38e2d3d30bbf00847a
-rw-r--r--src/gsm/cbsp.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/gsm/cbsp.c b/src/gsm/cbsp.c
index b89358d4..6ddef33f 100644
--- a/src/gsm/cbsp.c
+++ b/src/gsm/cbsp.c
@@ -177,12 +177,15 @@ static int cbsp_enc_write_repl(struct msgb *msg, const struct osmo_cbsp_write_re
}
} else {
int wperiod = encode_wperiod(in->u.emergency.warning_period);
+ uint8_t *cur;
if (wperiod < 0)
return -EINVAL;
msgb_tv_put(msg, CBSP_IEI_EMERG_IND, in->u.emergency.indicator);
msgb_tv16_put(msg, CBSP_IEI_WARN_TYPE, in->u.emergency.warning_type);
- msgb_tlv_put(msg, CBSP_IEI_WARN_SEC_INFO, sizeof(in->u.emergency.warning_sec_info),
- in->u.emergency.warning_sec_info);
+ /* Tag + fixed length value! */
+ msgb_put_u8(msg, CBSP_IEI_WARN_SEC_INFO);
+ cur = msgb_put(msg, sizeof(in->u.emergency.warning_sec_info));
+ memcpy(cur, in->u.emergency.warning_sec_info, sizeof(in->u.emergency.warning_sec_info));
msgb_tv_put(msg, CBSP_IEI_WARNING_PERIOD, wperiod);
}
return 0;