]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
chelsio/chtls: Fix panic when listen on multiadapter
authorVinay Kumar Yadav <vinay.yadav@chelsio.com>
Mon, 19 Oct 2020 11:50:23 +0000 (17:20 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 Oct 2020 09:07:04 +0000 (10:07 +0100)
[ Upstream commit 9819f22c410b4bf6589d3126e8bc3952db507cbf ]

Add the logic to compare net_device returned by ip_dev_find()
with the net_device list in cdev->ports[] array and return
net_device if matched else NULL.

Fixes: 6abde0b24122 ("crypto/chtls: IPv6 support for inline TLS")
Signed-off-by: Venkatesh Ellapu <venkatesh.e@chelsio.com>
Signed-off-by: Vinay Kumar Yadav <vinay.yadav@chelsio.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/crypto/chelsio/chtls/chtls_cm.c

index f2553623587143cc3005e26c9b1464e5f2a300af..64567b6c358df38c5fa8e4b3d9cd47a3443b76b5 100644 (file)
@@ -92,11 +92,13 @@ static void chtls_sock_release(struct kref *ref)
 static struct net_device *chtls_find_netdev(struct chtls_dev *cdev,
                                            struct sock *sk)
 {
+       struct adapter *adap = pci_get_drvdata(cdev->pdev);
        struct net_device *ndev = cdev->ports[0];
 #if IS_ENABLED(CONFIG_IPV6)
        struct net_device *temp;
        int addr_type;
 #endif
+       int i;
 
        switch (sk->sk_family) {
        case PF_INET:
@@ -127,8 +129,12 @@ static struct net_device *chtls_find_netdev(struct chtls_dev *cdev,
                return NULL;
 
        if (is_vlan_dev(ndev))
-               return vlan_dev_real_dev(ndev);
-       return ndev;
+               ndev = vlan_dev_real_dev(ndev);
+
+       for_each_port(adap, i)
+               if (cdev->ports[i] == ndev)
+                       return ndev;
+       return NULL;
 }
 
 static void assign_rxopt(struct sock *sk, unsigned int opt)