fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-trx/+/43682?usp=email )
Change subject: Transceiver52M: check rc of osmo_trxc_msg_params_scan() ......................................................................
Transceiver52M: check rc of osmo_trxc_msg_params_scan()
Change-Id: Ibb029e04816209423569037890fe85dcf174bd7b Fixes: CID#564238 --- M Transceiver52M/Transceiver.cpp 1 file changed, 17 insertions(+), 10 deletions(-)
Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index 865b122..fb2cdd9 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -1060,18 +1060,25 @@ } else if (!strcmp(cmd.cmd, "SETFORMAT")) { // set TRXD protocol version unsigned version_recv = 0; - osmo_trxc_msg_params_scan(&cmd, "%u", &version_recv); - LOGCHAN(chan, DTRXCTRL, INFO) << "BTS requests TRXD version switch: " << version_recv; - if (version_recv > TRX_DATA_FORMAT_VER) { - LOGCHAN(chan, DTRXCTRL, INFO) << "rejecting TRXD version " << version_recv - << " in favor of " << TRX_DATA_FORMAT_VER; - rsp.status = TRX_DATA_FORMAT_VER; + if (osmo_trxc_msg_params_scan(&cmd, "%u", &version_recv) != 1) { + LOGCHAN(chan, DTRXCTRL, NOTICE) << "bogus message on control interface"; + /* Unlike other commands, SETFORMAT's status is not a generic ACK/NACK + * but the negotiated/preferred version; -1 is the reserved value for + * "no suitable version" / malformed request. */ + rsp.status = -1; } else { - LOGCHAN(chan, DTRXCTRL, NOTICE) << "switching to TRXD version " << version_recv; - mVersionTRXD[chan] = version_recv; - rsp.status = version_recv; + LOGCHAN(chan, DTRXCTRL, INFO) << "BTS requests TRXD version switch: " << version_recv; + if (version_recv > TRX_DATA_FORMAT_VER) { + LOGCHAN(chan, DTRXCTRL, INFO) << "rejecting TRXD version " << version_recv + << " in favor of " << TRX_DATA_FORMAT_VER; + rsp.status = TRX_DATA_FORMAT_VER; + } else { + LOGCHAN(chan, DTRXCTRL, NOTICE) << "switching to TRXD version " << version_recv; + mVersionTRXD[chan] = version_recv; + rsp.status = version_recv; + } + snprintf(rsp.params, sizeof(rsp.params), "%u", version_recv); } - snprintf(rsp.params, sizeof(rsp.params), "%u", version_recv); } else if (!strcmp(cmd.cmd, "RFMUTE")) { // (Un)mute RF TX and RX unsigned mute = 0;