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
diff --git a/src/gsm/cbsp.c b/src/gsm/cbsp.c
index b89358d..6ddef33 100644
--- a/src/gsm/cbsp.c
+++ b/src/gsm/cbsp.c
@@ -177,12 +177,15 @@
}
} 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;