mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
ehea: Fixed possible kernel panic on VLAN packet recv
This patch fixes a possible kernel panic due to not checking the vlan group when processing received VLAN packets and a malfunction in VLAN/hypervisor registration. Signed-off-by: Thomas Klein <tklein@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
0d04761d17
commit
dec590c1bb
@ -39,7 +39,7 @@
|
||||
#include <asm/io.h>
|
||||
|
||||
#define DRV_NAME "ehea"
|
||||
#define DRV_VERSION "EHEA_0061"
|
||||
#define DRV_VERSION "EHEA_0064"
|
||||
|
||||
#define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \
|
||||
| NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
|
||||
|
@ -451,7 +451,8 @@ static struct ehea_cqe *ehea_proc_rwqes(struct net_device *dev,
|
||||
processed_rq3++;
|
||||
}
|
||||
|
||||
if (cqe->status & EHEA_CQE_VLAN_TAG_XTRACT)
|
||||
if ((cqe->status & EHEA_CQE_VLAN_TAG_XTRACT)
|
||||
&& port->vgrp)
|
||||
vlan_hwaccel_receive_skb(skb, port->vgrp,
|
||||
cqe->vlan_tag);
|
||||
else
|
||||
@ -1910,10 +1911,7 @@ static void ehea_vlan_rx_register(struct net_device *dev,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (grp)
|
||||
memset(cb1->vlan_filter, 0, sizeof(cb1->vlan_filter));
|
||||
else
|
||||
memset(cb1->vlan_filter, 0xFF, sizeof(cb1->vlan_filter));
|
||||
memset(cb1->vlan_filter, 0, sizeof(cb1->vlan_filter));
|
||||
|
||||
hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id,
|
||||
H_PORT_CB1, H_PORT_CB1_ALL, cb1);
|
||||
@ -1947,7 +1945,7 @@ static void ehea_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
|
||||
}
|
||||
|
||||
index = (vid / 64);
|
||||
cb1->vlan_filter[index] |= ((u64)(1 << (vid & 0x3F)));
|
||||
cb1->vlan_filter[index] |= ((u64)(0x8000000000000000 >> (vid & 0x3F)));
|
||||
|
||||
hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id,
|
||||
H_PORT_CB1, H_PORT_CB1_ALL, cb1);
|
||||
@ -1982,7 +1980,7 @@ static void ehea_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
|
||||
}
|
||||
|
||||
index = (vid / 64);
|
||||
cb1->vlan_filter[index] &= ~((u64)(1 << (vid & 0x3F)));
|
||||
cb1->vlan_filter[index] &= ~((u64)(0x8000000000000000 >> (vid & 0x3F)));
|
||||
|
||||
hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id,
|
||||
H_PORT_CB1, H_PORT_CB1_ALL, cb1);
|
||||
|
Loading…
Reference in New Issue
Block a user