summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuryakanth Sekar <suryakanth.sekar@linux.intel.com>2019-08-30 11:54:20 +0530
committerVernon Mauery <vernon.mauery@linux.intel.com>2020-01-14 16:31:14 +0000
commit8e8c8e29dd7c0a2a448bebae6897d2f8c6030e5d (patch)
treea2e13330ea434c405fd2e7597249260b890a05c7
parent5b7c3266d3f8e49f48f1fed43caed078c8a8af8d (diff)
downloadphosphor-host-ipmid-8e8c8e29dd7c0a2a448bebae6897d2f8c6030e5d.tar.gz
phosphor-host-ipmid-8e8c8e29dd7c0a2a448bebae6897d2f8c6030e5d.zip
As per 802.1q,valid VLAN ID should be 0-4095
Issue: In Set LAN configuration, able to set VLAN ID out its range. Fix: Added proper conditions to validate the request. Tested: //Setting the VLAN with invalid VLAN ID (4096) ipmitool -I lanplus -U root -P 0penBmc -H <ip> raw 0x0c 0x01 0x01 0x14 0x00 0x90 0xCC //Invalid data field in request //Setting the VLAN ID reserved bits with VLAN ID disable ipmitool -I lanplus -U root -P 0penBmc -H <ip> raw 0x0c 0x01 0x01 0x14 0x00 0x70 0xCC //Invalid data field in request //Setting the VLAN ID reserved bits with VLAN ID enabled ipmitool -I lanplus -U root -P 0penBmc -H <ip> raw 0x0c 0x01 0x01 0x14 0x00 0xf0 0xCC //Invalid data field in request Signed-off-by: Rajashekar Gade Reddy <raja.sekhar.reddy.gade@linux.intel.com> Change-Id: I03987cff13845bdfb7156367fedee3d78b957651
-rw-r--r--transporthandler.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/transporthandler.cpp b/transporthandler.cpp
index d7eef14..e112668 100644
--- a/transporthandler.cpp
+++ b/transporthandler.cpp
@@ -1497,17 +1497,30 @@ RspType<> setLan(uint4_t channelBits, uint4_t, uint8_t parameter,
}
case LanParam::VLANId:
{
- uint16_t vlanData;
- if (req.unpack(vlanData) != 0 || !req.fullyUnpacked())
+ uint12_t vlanData = 0;
+ uint3_t reserved = 0;
+ bool vlanEnable = 0;
+
+ if (req.unpack(vlanData) || req.unpack(reserved) ||
+ req.unpack(vlanEnable) || !req.fullyUnpacked())
{
return responseReqDataLenInvalid();
}
- if ((vlanData & VLAN_ENABLE_FLAG) == 0)
+
+ if (reserved)
+ {
+ return responseInvalidFieldRequest();
+ }
+
+ uint16_t vlan = static_cast<uint16_t>(vlanData);
+
+ if (!vlanEnable)
{
- lastDisabledVlan[channel] = vlanData & VLAN_VALUE_MASK;
- vlanData = 0;
+ lastDisabledVlan[channel] = vlan;
+ vlan = 0;
}
- channelCall<reconfigureVLAN>(channel, vlanData & VLAN_VALUE_MASK);
+ channelCall<reconfigureVLAN>(channel, vlan);
+
return responseSuccess();
}
case LanParam::CiphersuiteSupport:
OpenPOWER on IntegriCloud