s390/qeth: lock IP table while applying takeover changes
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Wed, 13 Dec 2017 17:56:31 +0000 (18:56 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 2 Jan 2018 19:31:08 +0000 (20:31 +0100)
[ Upstream commit 8a03a3692b100d84785ee7a834e9215e304c9e00 ]

Modifying the flags of an IP addr object needs to be protected against
eg. concurrent removal of the same object from the IP table.

Fixes: 5f78e29ceebf ("qeth: optimize IP handling in rx_mode callback")
Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/s390/net/qeth_l3_sys.c

index aada072ef0e3ead1c5e68f5d97ffb43c850ad3e7..a2634836fd1e5c87c1ae9e04cb70b1eb90287b96 100644 (file)
@@ -395,6 +395,7 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
                goto out;
        card->ipato.enabled = enable;
 
+       spin_lock_bh(&card->ip_lock);
        hash_for_each(card->ip_htable, i, addr, hnode) {
                if (addr->type != QETH_IP_TYPE_NORMAL)
                        continue;
@@ -403,6 +404,7 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
                else if (qeth_l3_is_addr_covered_by_ipato(card, addr))
                        addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG;
        }
+       spin_unlock_bh(&card->ip_lock);
 out:
        mutex_unlock(&card->conf_mutex);
        return rc ? rc : count;