osmux: osmux_xfrm_output_pull: Improve checks and log of malformed packets

Change-Id: I143805bb5ee9f5e3ada46114e380a03ede80df9f
Related: SYS#4182
This commit is contained in:
Pau Espin 2018-04-12 15:32:18 +02:00 committed by Harald Welte
parent 9f521e10db
commit 23148b069f
1 changed files with 11 additions and 5 deletions

View File

@ -85,8 +85,13 @@ next:
case OSMUX_FT_VOICE_AMR:
break;
case OSMUX_FT_DUMMY:
msgb_pull(msg, osmux_ft_dummy_size(osmuxh->amr_ft,
osmuxh->ctr + 1));
len = osmux_ft_dummy_size(osmuxh->amr_ft, osmuxh->ctr + 1);
if (msgb_length(msg) < len) {
LOGP(DLMUX, LOGL_ERROR, "Discarding bad Dummy FT: %s\n",
osmo_hexdump(msg->data, msgb_length(msg)));
return NULL;
}
msgb_pull(msg, len);
goto next;
default:
LOGP(DLMUX, LOGL_ERROR, "Discarding unsupported Osmux FT %d\n",
@ -102,9 +107,10 @@ next:
len = osmo_amr_bytes(osmuxh->amr_ft) * (osmuxh->ctr+1) +
sizeof(struct osmux_hdr);
if (len > msg->len) {
LOGP(DLMUX, LOGL_ERROR, "Discarding malformed "
"OSMUX message\n");
if (msgb_length(msg) < len) {
LOGP(DLMUX, LOGL_ERROR,
"Discarding malformed OSMUX message: %s\n",
osmo_hexdump(msg->data, msgb_length(msg)));
return NULL;
}