Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp3054ybl; Tue, 7 Jan 2020 12:58:45 -0800 (PST) X-Google-Smtp-Source: APXvYqyVLBWmp4SthZXpyOF5gyC0V7mthZthPB4+o8p1YnZdRTLqpaXKaR/Q0KyoBAoMKKgEiSgs X-Received: by 2002:aca:d507:: with SMTP id m7mr308410oig.48.1578430724873; Tue, 07 Jan 2020 12:58:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578430724; cv=none; d=google.com; s=arc-20160816; b=Ym25T2DVh0eBqr+vtqFtCvbtbyp8enI0Wz21Tr1ZcVbNfmEcdPLg0AN/Urgku8xXdn ME7q8dZUCZqhrwiReYlDRqFyZB4uySHMjuWSFSVSDzPaUvRA6rEnh4YK9abQ+SPCpFZY BMm9+DVgE1EaVYQbH8jMp+IT4oY0bSa5OlNSrWxkJyFhuir8vjo90vmBKXdFCeFD3CeQ 4vd08Aikn2Jbbb/HXsS/GIlgfrxWv1zL/anHa4mQxvqf5oJzPYqq4PAbpRBLhtn/4hvj cpuyOiwuVPJ7MA1NqMPQEGr9c0bpNcMl7FpLljfVVEIpkjbrSmL4iJk9+WdWimtRY0bs oOLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=MewNiLmQOs+/t0gMQgHvoHg4WQvK0UOSqDVsboBmToc=; b=Q0zbYGJ7WCcF41rzqDtMrKHKdvPN/AI2eKkwHYvrlmu8S/AsS/QvrRGKXQxtXkDTdW YdyyrTw8nzVhVwjqWBelZvJucUMurCARGvDzGYAr9WUJLA8PiQIrEHUYzB3iccB2diox l/0plpgNs24tIy84lhw3OHeVH4q5BPoS26PctU2wA6K6yUky9yCCDk5PRdLXprjtdWO4 OLVKCliERphMCHWPsK4MuEH9ur0RItf/+1LlaAzhLVubshrD/q4pVUzeLvA6OY7lnpOV ICYlRuefzGcmb1zBw41omiiOWbHBjofmKGZJSrF85/wAFrnczo+kTXlkziY3E0DyrEmO maUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=V67Y8hpD; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z16si544532oti.143.2020.01.07.12.58.32; Tue, 07 Jan 2020 12:58:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=V67Y8hpD; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727558AbgAGU5W (ORCPT + 99 others); Tue, 7 Jan 2020 15:57:22 -0500 Received: from mail.kernel.org ([198.145.29.99]:54092 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727526AbgAGU5T (ORCPT ); Tue, 7 Jan 2020 15:57:19 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 810C020880; Tue, 7 Jan 2020 20:57:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578430638; bh=QF+mbxtCzZTOEnlWwSMLV75Ubjlot7rN6MqEVhiZbtM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V67Y8hpDZXuZknaJJ2OsslhEc6f9f4vyzFJwk+PfLZFQdIBISxr9r1VzCA9q+nDya jXNkD6sCuzG4pLgIExSp1IJbRkHk+vpCoC+DYbw/WKfDI4Og3eKx0/oeReAVgwdQbZ AQ6gzfJL2q9BT8r1ZNhbbSo9iPxRk5FrV/6Icp74= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bo Wu , Zhiqiang Liu , Lee Duncan , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.4 034/191] scsi: iscsi: Avoid potential deadlock in iscsi_if_rx func Date: Tue, 7 Jan 2020 21:52:34 +0100 Message-Id: <20200107205334.823722722@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200107205332.984228665@linuxfoundation.org> References: <20200107205332.984228665@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Bo Wu [ Upstream commit bba340c79bfe3644829db5c852fdfa9e33837d6d ] In iscsi_if_rx func, after receiving one request through iscsi_if_recv_msg func, iscsi_if_send_reply will be called to try to reply to the request in a do-while loop. If the iscsi_if_send_reply function keeps returning -EAGAIN, a deadlock will occur. For example, a client only send msg without calling recvmsg func, then it will result in the watchdog soft lockup. The details are given as follows: sock_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ISCSI); retval = bind(sock_fd, (struct sock addr*) & src_addr, sizeof(src_addr); while (1) { state_msg = sendmsg(sock_fd, &msg, 0); //Note: recvmsg(sock_fd, &msg, 0) is not processed here. } close(sock_fd); watchdog: BUG: soft lockup - CPU#7 stuck for 22s! [netlink_test:253305] Sample time: 4000897528 ns(HZ: 250) Sample stat: curr: user: 675503481560, nice: 321724050, sys: 448689506750, idle: 4654054240530, iowait: 40885550700, irq: 14161174020, softirq: 8104324140, st: 0 deta: user: 0, nice: 0, sys: 3998210100, idle: 0, iowait: 0, irq: 1547170, softirq: 242870, st: 0 Sample softirq: TIMER: 992 SCHED: 8 Sample irqstat: irq 2: delta 1003, curr: 3103802, arch_timer CPU: 7 PID: 253305 Comm: netlink_test Kdump: loaded Tainted: G OE Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015 pstate: 40400005 (nZcv daif +PAN -UAO) pc : __alloc_skb+0x104/0x1b0 lr : __alloc_skb+0x9c/0x1b0 sp : ffff000033603a30 x29: ffff000033603a30 x28: 00000000000002dd x27: ffff800b34ced810 x26: ffff800ba7569f00 x25: 00000000ffffffff x24: 0000000000000000 x23: ffff800f7c43f600 x22: 0000000000480020 x21: ffff0000091d9000 x20: ffff800b34eff200 x19: ffff800ba7569f00 x18: 0000000000000000 x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 x14: 0001000101000100 x13: 0000000101010000 x12: 0101000001010100 x11: 0001010101010001 x10: 00000000000002dd x9 : ffff000033603d58 x8 : ffff800b34eff400 x7 : ffff800ba7569200 x6 : ffff800b34eff400 x5 : 0000000000000000 x4 : 00000000ffffffff x3 : 0000000000000000 x2 : 0000000000000001 x1 : ffff800b34eff2c0 x0 : 0000000000000300 Call trace: __alloc_skb+0x104/0x1b0 iscsi_if_rx+0x144/0x12bc [scsi_transport_iscsi] netlink_unicast+0x1e0/0x258 netlink_sendmsg+0x310/0x378 sock_sendmsg+0x4c/0x70 sock_write_iter+0x90/0xf0 __vfs_write+0x11c/0x190 vfs_write+0xac/0x1c0 ksys_write+0x6c/0xd8 __arm64_sys_write+0x24/0x30 el0_svc_common+0x78/0x130 el0_svc_handler+0x38/0x78 el0_svc+0x8/0xc Link: https://lore.kernel.org/r/EDBAAA0BBBA2AC4E9C8B6B81DEEE1D6915E3D4D2@dggeml505-mbx.china.huawei.com Signed-off-by: Bo Wu Reviewed-by: Zhiqiang Liu Reviewed-by: Lee Duncan Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/scsi_transport_iscsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index 417b868d8735..ed8d9709b9b9 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -24,6 +24,8 @@ #define ISCSI_TRANSPORT_VERSION "2.0-870" +#define ISCSI_SEND_MAX_ALLOWED 10 + #define CREATE_TRACE_POINTS #include @@ -3682,6 +3684,7 @@ iscsi_if_rx(struct sk_buff *skb) struct nlmsghdr *nlh; struct iscsi_uevent *ev; uint32_t group; + int retries = ISCSI_SEND_MAX_ALLOWED; nlh = nlmsg_hdr(skb); if (nlh->nlmsg_len < sizeof(*nlh) + sizeof(*ev) || @@ -3712,6 +3715,10 @@ iscsi_if_rx(struct sk_buff *skb) break; err = iscsi_if_send_reply(portid, nlh->nlmsg_type, ev, sizeof(*ev)); + if (err == -EAGAIN && --retries < 0) { + printk(KERN_WARNING "Send reply failed, error %d\n", err); + break; + } } while (err < 0 && err != -ECONNREFUSED && err != -ESRCH); skb_pull(skb, rlen); } -- 2.20.1