mirror of
https://github.com/espressif/openthread.git
synced 2026-08-14 14:47:46 +00:00
[network-data] avoid overflow in Service TLV length computation (#3506)
This commit is contained in:
@@ -177,7 +177,7 @@ otError Local::AddService(uint32_t aEnterpriseNumber,
|
||||
otError error = OT_ERROR_NONE;
|
||||
ServiceTlv *serviceTlv;
|
||||
ServerTlv * serverTlv;
|
||||
uint8_t serviceTlvLength =
|
||||
size_t serviceTlvLength =
|
||||
(sizeof(ServiceTlv) - sizeof(NetworkDataTlv)) + aServiceDataLength + sizeof(uint8_t) /*mServiceDataLength*/ +
|
||||
ServiceTlv::GetEnterpriseNumberFieldLength(aEnterpriseNumber) + aServerDataLength + sizeof(ServerTlv);
|
||||
|
||||
@@ -186,13 +186,13 @@ otError Local::AddService(uint32_t aEnterpriseNumber,
|
||||
VerifyOrExit(mLength + sizeof(NetworkDataTlv) + serviceTlvLength <= sizeof(mTlvs), error = OT_ERROR_NO_BUFS);
|
||||
|
||||
serviceTlv = reinterpret_cast<ServiceTlv *>(mTlvs + mLength);
|
||||
Insert(reinterpret_cast<uint8_t *>(serviceTlv), serviceTlvLength + sizeof(NetworkDataTlv));
|
||||
Insert(reinterpret_cast<uint8_t *>(serviceTlv), static_cast<uint8_t>(serviceTlvLength) + sizeof(NetworkDataTlv));
|
||||
|
||||
serviceTlv->Init();
|
||||
serviceTlv->SetEnterpriseNumber(aEnterpriseNumber);
|
||||
serviceTlv->SetServiceID(0);
|
||||
serviceTlv->SetServiceData(aServiceData, aServiceDataLength);
|
||||
serviceTlv->SetLength(serviceTlvLength);
|
||||
serviceTlv->SetLength(static_cast<uint8_t>(serviceTlvLength));
|
||||
|
||||
serverTlv = reinterpret_cast<ServerTlv *>(serviceTlv->GetSubTlvs());
|
||||
serverTlv->Init();
|
||||
|
||||
Reference in New Issue
Block a user