s390/qeth: check dst entry before use
authorJulian Wiedmann <jwi@linux.ibm.com>
Wed, 5 Jun 2019 11:48:49 +0000 (13:48 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Jun 2019 18:48:57 +0000 (11:48 -0700)
commit0cd6783d3c7d40be165d1f3c811cedf0e3dfcdf1
tree5ae38c5aec257f6b5430f167e8a5d8b22cad82b4
parent72c87976c5abbf8a834ad85f10d03c0cd58b985c
s390/qeth: check dst entry before use

While qeth_l3 uses netif_keep_dst() to hold onto the dst, a skb's dst
may still have been obsoleted (via dst_dev_put()) by the time that we
end up using it. The dst then points to the loopback interface, which
means the neighbour lookup in qeth_l3_get_cast_type() determines a bogus
cast type of RTN_BROADCAST.
For IQD interfaces this causes us to place such skbs on the wrong
HW queue, resulting in TX errors.

Fix-up the various call sites to first validate the dst entry with
dst_check(), and fall back accordingly.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_l3_main.c