Commit 6f227543 authored by Cris Forno's avatar Cris Forno Committed by David S. Miller
Browse files

ibmveth: Detect unsupported packets before sending to the hypervisor

Currently, when ibmveth receive a loopback packet, it reports an
ambiguous error message "tx: h_send_logical_lan failed with rc=-4"
because the hypervisor rejects those types of packets. This fix
detects loopback packet and assures the source packet's MAC address
matches the driver's MAC address before transmitting to the
Signed-off-by: default avatarCris Forno <>
Signed-off-by: default avatarDavid S. Miller <>
parent 01db923e
......@@ -1011,6 +1011,29 @@ static int ibmveth_send(struct ibmveth_adapter *adapter,
return 0;
static int ibmveth_is_packet_unsupported(struct sk_buff *skb,
struct net_device *netdev)
struct ethhdr *ether_header;
int ret = 0;
ether_header = eth_hdr(skb);
if (ether_addr_equal(ether_header->h_dest, netdev->dev_addr)) {
netdev_dbg(netdev, "veth doesn't support loopback packets, dropping packet.\n");
if (!ether_addr_equal(ether_header->h_source, netdev->dev_addr)) {
netdev_dbg(netdev, "source packet MAC address does not match veth device's, dropping packet.\n");
return ret;
static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
struct net_device *netdev)
......@@ -1022,6 +1045,9 @@ static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
dma_addr_t dma_addr;
unsigned long mss = 0;
if (ibmveth_is_packet_unsupported(skb, netdev))
goto out;
/* veth doesn't handle frag_list, so linearize the skb.
* When GRO is enabled SKB's can have frag_list.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment