It's known there're one or more 32-bit increments in the ip
header. So just check ip router alert option length with minimal
performance impact, and don't care of the total options length.
Type: fix
Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Signed-off-by: Dmitry Valter <d-valter@yandex-team.ru>
Change-Id: I46dd06516f793846b931a1dc8612f2735f8d24d3
switch (options[0] & 0x7f)
{
case IP4_ROUTER_ALERT_OPTION:
switch (options[0] & 0x7f)
{
case IP4_ROUTER_ALERT_OPTION:
+ /*
+ * check the option length
+ */
+ if (options[1] != 4)
+ break;
/*
* if it's an IGMP packet, pass up the local stack
*/
/*
* if it's an IGMP packet, pass up the local stack
*/
dst="239.1.1.1",
tos=0xC0,
options=[
dst="239.1.1.1",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
dst="239.1.1.1",
tos=0xC0,
options=[
dst="239.1.1.1",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
dst="239.1.1.1",
tos=0xC0,
options=[
dst="239.1.1.1",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
dst="239.1.1.1",
tos=0xC0,
options=[
dst="239.1.1.1",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
dst="239.1.1.1",
tos=0xC0,
options=[
dst="239.1.1.1",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
dst="239.1.1.1",
tos=0xC0,
options=[
dst="239.1.1.1",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
],
)
/ IGMPv3(type="Membership Query", mrcode=100)
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
dst="224.0.0.22",
tos=0xC0,
options=[
dst="224.0.0.22",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
dst="224.0.0.22",
tos=0xC0,
options=[
dst="224.0.0.22",
tos=0xC0,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")
tos=0xC0,
ttl=1,
options=[
tos=0xC0,
ttl=1,
options=[
- IPOption(copy_flag=1, optclass="control", option="router_alert")
+ IPOption(
+ copy_flag=1, optclass="control", option="router_alert", length=4
+ )
],
)
/ IGMPv3(type="Version 3 Membership Report")
],
)
/ IGMPv3(type="Version 3 Membership Report")