From patchwork Wed May 10 20:37:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 9720641 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 16FF86035D for ; Wed, 10 May 2017 20:38:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2D7202862A for ; Wed, 10 May 2017 20:38:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 21F6128649; Wed, 10 May 2017 20:38:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3BF6C2862A for ; Wed, 10 May 2017 20:38:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753606AbdEJUh4 (ORCPT ); Wed, 10 May 2017 16:37:56 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:21247 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753556AbdEJUhx (ORCPT ); Wed, 10 May 2017 16:37:53 -0400 X-IronPort-AV: E=Sophos;i="5.38,320,1491235200"; d="scan'208";a="16703577" Received: from mail-bn3nam01lp0176.outbound.protection.outlook.com (HELO NAM01-BN3-obe.outbound.protection.outlook.com) ([216.32.180.176]) by ob1.hgst.iphmx.com with ESMTP; 11 May 2017 04:37:46 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector1-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=/RyjaGiGDF45nsLKDngg5PCw5RWNlvc+P+BBW5FAY6o=; b=cLB3LuXOpNOliDYroAHCFnM05HtMK2mGRpb+wO7Mv2KPleUSi8TdF9y8ljc+xddm4EmOjS2YS2oL5gjXdeV7agX/rMmql/n8yYbRjjNBd0Atcsq44F7m9kT5lcDIvDXMff5/qsIr/RDtA4bZtLSWJBkj8stqibFh9ftvhU72CSk= Received: from BLUPR0401CA0036.namprd04.prod.outlook.com (10.162.114.174) by DM2PR0401MB1214.namprd04.prod.outlook.com (10.160.217.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1075.11; Wed, 10 May 2017 20:37:43 +0000 Received: from BN3NAM04FT008.eop-NAM04.prod.protection.outlook.com (2a01:111:f400:7e4e::205) by BLUPR0401CA0036.outlook.office365.com (2a01:111:e400:525a::46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1075.11 via Frontend Transport; Wed, 10 May 2017 20:37:43 +0000 Authentication-Results: spf=pass (sender IP is 63.163.107.21) smtp.mailfrom=sandisk.com; suse.com; dkim=none (message not signed) header.d=none;suse.com; dmarc=bestguesspass action=none header.from=sandisk.com; Received-SPF: Pass (protection.outlook.com: domain of sandisk.com designates 63.163.107.21 as permitted sender) receiver=protection.outlook.com; client-ip=63.163.107.21; helo=milsmgep15.sandisk.com; Received: from milsmgep15.sandisk.com (63.163.107.21) by BN3NAM04FT008.mail.protection.outlook.com (10.152.92.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.1047.9 via Frontend Transport; Wed, 10 May 2017 20:37:42 +0000 Received: from MILHUBIP03.sdcorp.global.sandisk.com (Unknown_Domain [10.201.67.162]) (using TLS with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by (Symantec Messaging Gateway) with SMTP id B2.18.29323.51A73195; Wed, 10 May 2017 13:37:41 -0700 (PDT) Received: from milsmgip12.sandisk.com (10.177.9.6) by MILHUBIP03.sdcorp.global.sandisk.com (10.177.9.96) with Microsoft SMTP Server id 14.3.319.2; Wed, 10 May 2017 13:37:39 -0700 X-AuditID: 0ac94369-548749800000728b-21-59137a15461b Received: from exp-402881.sdcorp.global.sandisk.com ( [10.177.8.100]) by (Symantec Messaging Gateway) with SMTP id 3E.3F.18148.31A73195; Wed, 10 May 2017 13:37:39 -0700 (PDT) From: Bart Van Assche To: Nicholas Bellinger CC: , Bart Van Assche , Hannes Reinecke , "Christoph Hellwig" , Andy Grover , David Disseldorp Subject: [PATCH v2 4/6] target/iscsi: Make iscsit_map_iovec() more robust Date: Wed, 10 May 2017 13:37:34 -0700 Message-ID: <20170510203736.12462-5-bart.vanassche@sandisk.com> X-Mailer: git-send-email 2.12.2 In-Reply-To: <20170510203736.12462-1-bart.vanassche@sandisk.com> References: <20170510203736.12462-1-bart.vanassche@sandisk.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOLMWRmVeSWpSXmKPExsXCddJ5ka5olXCkQccODYv9s54xWXz9P53F YsGbvWwWK1cfZbJoW32G0aJ16VsmBzaP+9uPMHnsvtnA5vF+31U2j/VbrrJ4bD5d7fF5k1wA WxSXTUpqTmZZapG+XQJXxqxvW9kLWrUqNqzMa2DsVupi5OSQEDCRmPxqCzOILSSwlEli9knt LkYuIHsbo8SkW82MMEVdc5czQiQ2M0pMnN3BDpJgEzCS+PZ+JguILSKgIzHr7gt2kCJmgduM Emser2brYmTnEBbwlPjoClLCIqAqseLmFLByXgF7ifVT+9kh5stLnN2yE+wITgEHiatzVrBD HGQvcaPrBdheCYFFrBKvOzuYIJoFJU7OfAI2iFlAQuLgixdQH6hLnFwyn2kCo9AsJGWzkJQt YGRaxSiWm5lTnJueWmBoqlecmJeSWZytl5yfu4kREvyZOxjvPvE+xCjAwajEw6vAJRwpxJpY VlyZe4hRgoNZSYQ3KQMoxJuSWFmVWpQfX1Sak1p8iFGag0VJnPeczNQIIYH0xJLU7NTUgtQi mCwTB6dUA6PKQoHI7C2b2Be8WtuvH3OS5bL08X1uonX2m3t5aq6+0FHdvU9qvvc+3YX6jL81 Prtsqvd/ksrQO/t21841DZOdzjq9OplSWDjv4opjilNbNar69wgElIgZGLE6LNVK5hR/098c +VxAIYGBw7Jj3/Xtskt7rzAFBn+Li172W3WfwNYaMSkOSSWW4oxEQy3mouJEAIEhvcl6AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrOJMWRmVeSWpSXmKPExsXCtZEjRVe4SjjS4OU3bYv9s54xWRz82cZo 8fX/dBaLBW/2slmsXH2UyaJt9RlGi9alb5kc2D3ubz/C5LH7ZgObx/t9V9k8pq05z+SxfstV Fo/Np6s9Pm+SC2CP4rJJSc3JLEst0rdL4MqY9W0re0GrVsWGlXkNjN1KXYycHBICJhJdc5cz djFycQgJbGSU+L5jNTtIgk3ASOLb+5ksILaIgI7ErLsv2EGKmAXuMkqc6f7E1sXIziEs4Cnx 0RWkhEVAVWLFzSlg5bwC9hKTO7sYIebLS5zdspMZxOYUcJC4OmcF2HghoJobXS8YJzByL2Bk WMUolpuZU5ybnllgaKRXnJiXklmcrZecn7uJERw0nFE7GK9PND/EyMTBKdXAqLv48EF+LtOO pXOetaySr22WqjX5/+D76qIF6/xPK/lm37Y4/Ezxna6AFlude5iS500h+WnbapxfOcbGHPo7 5dmXuE/+Lp9SzbKLZh21V9O15fn651mXb/MHj4JTahNfGt4tN7aPYNn/xPLAv/gMh3Ob5DX0 6gucX11SufZY570J7+X3tlu5lFiKMxINtZiLihMBTANnJ8oBAAA= MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:63.163.107.21; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(39840400002)(39850400002)(39400400002)(39410400002)(2980300002)(438002)(189002)(199003)(9170700003)(8676002)(6666003)(48376002)(53936002)(50466002)(189998001)(575784001)(50986999)(2950100002)(54906002)(4326008)(356003)(76176999)(86362001)(36756003)(5003940100001)(8936002)(81166006)(77096006)(50226002)(6916009)(33646002)(110136004)(106466001)(1076002)(38730400002)(5660300001)(478600001)(72206003)(305945005)(2906002); DIR:OUT; SFP:1102; SCL:1; SRVR:DM2PR0401MB1214; H:milsmgep15.sandisk.com; FPR:; SPF:Pass; MLV:sfv; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN3NAM04FT008; 1:oNzC20jPZhpWaSCo0YPIyf9RfmZh4Rt5NRPf6hWB5nahcrwpvG9qrhZVQwCnu4qOEQ4B5yMebHB7Gdb02ayAxpk1pY3ZvCXE/WdECQCaORMl93030t8ro5BtNtYwUWYD+mAN5GNWkaT1b1tCEh99io12HOa76wjnxQCdcB+/O0cjGB13mblh/32sZm8bC3DZdeiJIuy+3twMPaFxGfZJodnJjpPuhYYiiDLzN4Oy9lWRfL8YlVSS50DhcD6gj/04ra95bIOv12PNaWd3ybX3QoeZ5Wwy+C4dZEH0lDQ1lYEC9lxE5Yzu5VOdoGFNTmAUBEvYOhVW+GxZgFAWmXqo3GVNxmzZt8sEmlUE9mjOW3SM2JwXmkjlunixXwwBtNONL/h5rPWY5fepHQYQC128mSgOjmhYCEKmUQw7uEguXD2MueLKLKEoR9+jJQ+/nY+T1p/TKzbIj2xIPka4hda7MPruDwxyAnozTdRGFdH81Net7YaCdht1TTKHSbyXe5TdSslTcnieXQzM6ioiPrHxTFf347IZ2KzkQVhnJUgT64Q= X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 59ceb028-9370-4756-85c1-08d497e468aa X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002)(2017030254075)(201703131423075)(201703031133081); SRVR:DM2PR0401MB1214; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0401MB1214; 3:VdoT9BQLXmb/f95XFwNIXp4efvJh06P/bBqgaCcgf92KafCfgKIOyeoaimZ1fPXA14/RbFg5I+kfpSZiCnlTiX2y6NW+WjsY35qewuOqeAxNQuT+GAQ8gjxbwgstJrE7YT4CDYZiR7r3taN5txAEEjrrYRlONdnCsKUH8nw64tYrWc26YnJlguXZ+UIbWqGsA6l1HaPKQGnNHVk5frMkUOcGTIz1qNh5hqgCiz013tyTiPlCIdDXELfENW3fcc7Ar/oEuVkK61ZzF/wC3L6VA8j467FuwqtdYH8204z69YyCnpZthdoBAqcGjp+bT0+/9THzHuilSIpStswTvEGamzFubSa5D40JEVw8Ts8WNfi6r4yNndau5cK+aeu4Smm0yNgYC909AJ8J+CulR3ttxZ0d4Y18/+Q4Ie0G2lXASS8agMb0Su0jxVyuWGEqiHtIAt5zHY5BCuzZ0F/8sO8f4PERE3t9fjUTDqtKJEPrOzpTFfRhVo/Oyzo+ZVw4lKMp X-Microsoft-Exchange-Diagnostics: 1; DM2PR0401MB1214; 25:eX/AzV4gIl2yxch2V2iy7w5jUZweWYAaaDUd61oYkh+upuwtX3PWHspahCKL4LPqO9AWyAXsF/B5uAkftTc4Ckb9hJ5B8daXfcsz3qOybXgonETIM3XwG4d7PAaR+8VyHJJj2uj8HhaFKk7fa2DjKrs3st7zAOA/8WRGJBBT0eDpKqmAbmoNkKkqmaoKa4zCIglRcDLch+wiY7hW5k/B93NocfzX/H0r2hSvdpPN/YppuOwx1cMfa4yLfmMfXLgvMLSVj3aFUf41z+r60PlC8oK27p0xiDE0dOahwnOe/P4lfO/3b9nty5E1hPgZQR+Q8N9NVH99kVM9EwyWod461OnSyVed0YE6QAVtuij9o6omZFyw/sPvFNVz80Vlf/7GcIWjhuKxtkw6hp/dPZAL6zvRPruHjVBFeDJIwDNkRXPxtJt5f68l/1tspGqTyjAwSvhI2mnr/9kw6nJ0LOln2Rx4IKnFsATSgwEYyXiRd8E=; 31:WZImmdOuMrnA+oQQxYsX/rPfNGsfMJuQpxvwFhzb7Yk8xoTOLjJHxpzIAHcccAE+ULDxwfJYFjmTa8kzLyldcj2O4BaLwHbtqhAtMfCkAW4yN3ci5QVBihh+Tdp6frc81h1EdVwr4lCQ3geO2QiwIQRSTIyq+DdeZ1Q3BoQcN0yIJ9kIXtHgA0jZq1TZKu96jdtkatyA0YKOJoNAt6QY6b+78o1zn18sfWpFFI5a/+0VUmWkIBHKJjZHl8SISWXjGubqjuQ8C7pvXqEM5kKOtN5THCaSFKb0O97FVgwFnTg= WDCIPOUTBOUND: EOP-TRUE X-Microsoft-Exchange-Diagnostics: 1; DM2PR0401MB1214; 20:sD+tDZIcbK328DnfJdEO9fHxOgMZIfWtJLySSM7fg6uIDU/cmBN0s9luUeKKNG0K7DJh+FVmp+upvKDERdHIZS/7lOPN09JpPFHkzfy5Ha3CqHIYDJTmNlbpLEPQGjzCySY40HqT0Xs+97VcHvtc4yrZvsLtDlKN0PNO2mAWXVxRTSBiWg6owBEPKkOoUC+d+weUijWSm9AD5KxkRsqlaM5QEF4883V1/U+PZJtDzKU+/Lnyjlckdmrcefn2+lLfphRBGucujuA+4vftegegufSZ8d5oW6CQjlogR7+E6tPmgSwi94IcugnDRnQGsHdLmym2symJcsmeJRsIBKDay4iDVGBe/kFwuZ141vGpmKWtXG8dwVEBuUOQG7PLI2dRS4QvWL5dC9k6kbTRX13Y+gRVf31GCrYl+Dee2w8QhcRXx4nfc+jiLhKlFWOkrDTazrsaGEqd4sCoiHQD8QR5wN54qfzeDjJmrY15xLhkT1tsieSGwLdZfpkU2jURQ91a X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(42932892334569); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(13018025)(5005006)(13016025)(8121501046)(93006095)(93004095)(3002001)(10201501046)(6055026)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(20161123558100)(20161123560025)(6072148); SRVR:DM2PR0401MB1214; BCL:0; PCL:0; RULEID:; SRVR:DM2PR0401MB1214; X-Microsoft-Exchange-Diagnostics: 1; DM2PR0401MB1214; 4:PBhwTKI5QA0whKUm8Zbr2ON3vaXNHVRt1y7TGNg6XBhsjCubcwTe42Twkld76Yuhn/1WXHbaEzOhyn6V+6qvCze4d6wTXdwSDezXzhyJbzwQRlXzSEKfexbMUIQPidin54+Y56xq1MCr112NQr/ghbLGor4oL0B1dq7imieCSL7kQhjfwo/nGdpLHDID+Jw1rxX/FhTJSmHUE8Kanfv8LsrP27UEfamqm1VLlHP5HCqkcnGulYqOz48ipKNTLVTxx9wmj94r6y2TGVy3g09N/am2dtoV6LCAP48vhJf+F1R2J0qf6DzyYgicNs2pGXTt/M/vBapchMZpNx/EFE1MjGyNACZTmAT/Jss/6NlEoDYoVEMTgikxCzVxdmF20jUrS2oIeLRfyiv3Lz+oz4Iaki0xcpGu1ZQC9315cnF2YxZBZybt4bldAK5p7ed/Gk/WkjM59Cego0Csu3S+GnwHDo3PMKHDJSnLeXL0emsYW8AWoP9kJ+iJBy4QvyLAOEazeBDMjqDp3XWoL/DVO93/YltHi/JQpAE0qbKnLZv3+QussehACgnjASri7ikxfA7tywyTTDe9lQ4xIgE+BJyuG7DNS1JfI0FHI63WUQi7oWA3cJ13lcI2M7aiFipb4FSaj4t/Jp0qEE0eaHiMoQ6jWEpoqQ3KbAwLy3dX1jAcWMb7K7Z9PYlaaiVkT2CJE/z+xYRxKheyzKjbIuFs3VhkzChNBPjYbl+7uzXwk3ZPjD8q4i6E4uy13A3RK3zZlukBbRmZ+dJJaVW9Jts2pIes55tKlk4r1g1SO/pFdOgCuQqXBpQC4tbU4afDpv1QXwaTLF0adFPR2kTkgzC1qBBL+LgjURj0TkQo3Zhbd6VSzX6QafiYg/03fe3Rp+InPitN X-Forefront-PRVS: 03030B9493 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR0401MB1214; 23:V4h1RXoGPnmJAyzWKx0+0LREDVNJlAttTiycTnX?= =?us-ascii?Q?L8Gm2HYNuYAJWf1N3rN/UwC5Qgr7rAPMfsuYcsK+WGNRlCA4OojPQ10W0dXB?= =?us-ascii?Q?olrlMNNhSYj4li2pjBAykZTVAboIaVBIRGtYPHXhusRAswBmALOox2mRQIHU?= =?us-ascii?Q?ekc+b3s2XtcDUonbYQewZu/S5Bn5wu8eagDimIMvo9WGJZbWgMgmCWKuoIAc?= =?us-ascii?Q?2BwmGXotnFpG8F750gN2HDi0N+aDr5WGtsHPCJ+IkHU8jsZZL3V02BxPyFCh?= =?us-ascii?Q?UBzRUYEVGQdsDu//eKCFcxwOqlyS0kx8q0dWTYukIF2gJvp6i7OSP8CECYbP?= =?us-ascii?Q?Qrixs/IjZ6lGcxBcahjdg73B6aFriKpkN6QyeEzvKsE9OT0eZ80U2yMjlpkW?= =?us-ascii?Q?oaVYDw6BITXeZhKF9hNtZ7c1dGvM0bPqf96tK2OpsJ3VJBwQ/jP+uDB50a8K?= =?us-ascii?Q?Xn6bhUXn88zIhNj+2Q2Y5VlPNkTj4pfZJGZKvixlTeW9hPNYwUFJ87cgDiiQ?= =?us-ascii?Q?eUgFz7oocTZe52TK1eayQFXGggOqSnTg37FFpXvIqFrzzY2UXJaSXIUGcpDa?= =?us-ascii?Q?HTdo980F48ud3K0+eaMAhk2XR3SRx6/vvSBRD3u1dSxSxGsSJCtHioenS0Kb?= =?us-ascii?Q?9cqHPhQFAW3m/kSQDkLzwoTjj9Xwhy0HA2wt2C5za1dfRT4kj9CWr9WSU2zI?= =?us-ascii?Q?oUxKUIHHwu8YCdkMqabr4ArG4aGgllXVAWd4JoLRYnRSnMVEMAvnPtgOAUus?= =?us-ascii?Q?IBC0jpvvMwTmg//j2uRfkvtxtxFwNi48U5RVtoqy0Cu7JC29olA+RdAGvq75?= =?us-ascii?Q?oHqYPCr1Fw2g7HEyvNQp2iGmV/3RyeeRVxHv/soOBdVnOy/a6VXJGOWvAvK6?= =?us-ascii?Q?oPzm/wwOdhM2jhitNQqjH+KvhtPZv+tIYaz1nvbGQfhMCsjDsJ4d63sGYJjH?= =?us-ascii?Q?ycG35RC8JeVhW7gQufWThoJpmOiwwTVi/FkDEIej63ASL1vlGVy20u1SA5la?= =?us-ascii?Q?Im3vtQCfnaNTCNT5TnlUcsZiFSPsG6EsGmxtpUV5YZMhPXw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR0401MB1214; 6:bGIhM1cLzr6A1u62+vJM83Sj1pzcMVcVl0my8FRA3WIMSKUbztPpGz0d9UbUnMVNssto6o9ZGXRnQ+P+YowtwGI1Ip4GlDOb0UKf7/1o3FUIdWW2qF7c5eJ9IYMlBNoU04QBiIKIvyrwVluv+UsED3sG4l+69dJZVMEZ13tPy8kiWnYkIXJsRsKX25zSELBldHRWkFc7zWLbC96Vn4IBcNepebaU8C2M4PGmiprPqF+RLAeMhZh3DyV4prQHPx4lsFPvAfJ/06NvwLudpCYCy2L1lG20U8zIu+IciW60tEOZ2O+S2gyH4B+hG+LM8w4jgTzrn6VBs0CNzEj0WvGlCB3xaP6cT/58ZHZqOmGLb58M0v88T6WfijPq6pDt5ImYqXK18BxXpbAWRnvN5TQ4EXNM6gK1FkMLlrqzzoVx+rK0rTfFOLVCo4LrcLJLVipAE8pzTaj4S/zW1i28GaXo+TJWhgOo1Imr+XU67jTw59m/jzh8I99dVTMO3hTXztd2LfFYOEWUB/zlVHcTnPi6byHTqnmkAQytX2FEZi+1B08=; 5:PcXfMmE3U4SvlCIAtAVH8qEw1osbtfcy53QI6WWNJhapfB2p2BtW+mKe+5Z8S0cSze8aVsLDA5P41Zso4xuT/XLd9heg3jn84VEVOu4NIgiG/HaiAPpg7eJxaWcxXQCbiOhc+98noUOyjHLuwgNLMA==; 24:q/zc7vNQ4uFsgP3XJadX75h4sE2NaGL4gCpbcvRJeYwALHs4K8fozzse/N/J9/6avmd+/zzvil+Zt7NzStfBwHzI9Wm0nwJ4lvxq+0Te/vs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR0401MB1214; 7:ogiOmu55RRZm5SmwvVmkfYZU8rZFyKAu6+nRcGg82Gu5jPOXpBxCJc4cP13jwqc+S5JGl7gNuqgLonptZ7E+P3JRbWMSGzU/saTcvYwVbH6MYMLNdqQFTTXbJV5rGYlW4g8Xt90gmSroggNST+8Xy6l3D3n3E1B4twSGGAZHxB//kBimZMc6Gn7/KctR0GtFFZ+7J4+o7FSM/DGJDiqo0iJWeR8LzWgkUP9KhBq8aHFstFY1YjqoIA91W1gfTdB2cBltML1n98E4ljRxyyNHvcouwOdGktpn7PjOnHHToBucO6rwQDGxKBzSp13kE9Q+/Ts9F06nIO0gotC5K/+CGg==; 20:bstFlQuv1Usov4qbRcZWo5G1CeqX48bOQadcARPg/O1xG7SHbOOIaQAZmVgNO1yerh0m0k9JM4/zRcsxL85cKLkXdl7PC6nBnHo4atSkFVqUWbWWXcBkOaOX5qtQbrJurq37Xl1MW4plgrxL4wKTENnVT1YLNCYbKJMaSRMvN54= X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 May 2017 20:37:42.4175 (UTC) X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=b61c8803-16f3-4c35-9b17-6f65f441df86; Ip=[63.163.107.21]; Helo=[milsmgep15.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0401MB1214 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Make the code for mapping an iovec more robust by checking the bounds of the allocated iovec. This patch avoids that the following crash occurs if a map attempt is made that exceeds the bounds of the iovec that is being mapped: BUG: unable to handle kernel NULL pointer dereference at 00000000 00000014 RIP: 0010:iscsit_map_iovec+0x120/0x190 [iscsi_target_mod] Call Trace: iscsit_get_rx_pdu+0x8a2/0xe00 [iscsi_target_mod] iscsi_target_rx_thread+0x6e/0xa0 [iscsi_target_mod] kthread+0x109/0x140 Signed-off-by: Bart Van Assche Cc: Hannes Reinecke Cc: Christoph Hellwig Cc: Andy Grover Cc: David Disseldorp --- drivers/target/iscsi/iscsi_target.c | 44 +++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index de872abd0f09..97879976f0ce 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c @@ -574,7 +574,8 @@ iscsit_xmit_nondatain_pdu(struct iscsi_conn *conn, struct iscsi_cmd *cmd, return 0; } -static int iscsit_map_iovec(struct iscsi_cmd *, struct kvec *, u32, u32); +static int iscsit_map_iovec(struct iscsi_cmd *, struct kvec *, u32 nvec, + u32, u32); static void iscsit_unmap_iovec(struct iscsi_cmd *); static u32 iscsit_do_crypto_hash_sg(struct ahash_request *, struct iscsi_cmd *, u32, u32, u32, u8 *); @@ -605,7 +606,8 @@ iscsit_xmit_datain_pdu(struct iscsi_conn *conn, struct iscsi_cmd *cmd, *header_digest); } - iov_ret = iscsit_map_iovec(cmd, &cmd->iov_data[1], + iov_ret = iscsit_map_iovec(cmd, &cmd->iov_data[iov_count], + cmd->orig_iov_data_count - (iov_count + 2), datain->offset, datain->length); if (iov_ret < 0) return -1; @@ -891,10 +893,11 @@ EXPORT_SYMBOL(iscsit_reject_cmd); static int iscsit_map_iovec( struct iscsi_cmd *cmd, struct kvec *iov, + u32 nvec, u32 data_offset, u32 data_length) { - u32 i = 0; + u32 i = 0, orig_data_length = data_length; struct scatterlist *sg; unsigned int page_off; @@ -903,9 +906,12 @@ static int iscsit_map_iovec( */ u32 ent = data_offset / PAGE_SIZE; + if (!data_length) + return 0; + if (ent >= cmd->se_cmd.t_data_nents) { pr_err("Initial page entry out-of-bounds\n"); - return -1; + goto overflow; } sg = &cmd->se_cmd.t_data_sg[ent]; @@ -915,7 +921,12 @@ static int iscsit_map_iovec( cmd->first_data_sg_off = page_off; while (data_length) { - u32 cur_len = min_t(u32, data_length, sg->length - page_off); + u32 cur_len; + + if (WARN_ON_ONCE(!sg || i >= nvec)) + goto overflow; + + cur_len = min_t(u32, data_length, sg->length - page_off); iov[i].iov_base = kmap(sg_page(sg)) + sg->offset + page_off; iov[i].iov_len = cur_len; @@ -929,6 +940,16 @@ static int iscsit_map_iovec( cmd->kmapped_nents = i; return i; + +overflow: + pr_err("offset %d + length %d overflow; %d/%d; sg-list:\n", + data_offset, orig_data_length, i, nvec); + for_each_sg(cmd->se_cmd.t_data_sg, sg, + cmd->se_cmd.t_data_nents, i) { + pr_err("[%d] off %d len %d\n", + i, sg->offset, sg->length); + } + return -1; } static void iscsit_unmap_iovec(struct iscsi_cmd *cmd) @@ -1578,8 +1599,8 @@ iscsit_get_dataout(struct iscsi_conn *conn, struct iscsi_cmd *cmd, rx_size += payload_length; iov = &cmd->iov_data[0]; - iov_ret = iscsit_map_iovec(cmd, iov, be32_to_cpu(hdr->offset), - payload_length); + iov_ret = iscsit_map_iovec(cmd, iov, cmd->orig_iov_data_count - 2, + be32_to_cpu(hdr->offset), payload_length); if (iov_ret < 0) return -1; @@ -1599,6 +1620,7 @@ iscsit_get_dataout(struct iscsi_conn *conn, struct iscsi_cmd *cmd, rx_size += ISCSI_CRC_LEN; } + WARN_ON_ONCE(iov_count > cmd->orig_iov_data_count); rx_got = rx_data(conn, &cmd->iov_data[0], iov_count, rx_size); iscsit_unmap_iovec(cmd); @@ -1864,6 +1886,7 @@ static int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, rx_size += ISCSI_CRC_LEN; } + WARN_ON_ONCE(niov > cmd->orig_iov_data_count); rx_got = rx_data(conn, &cmd->iov_misc[0], niov, rx_size); if (rx_got != rx_size) { ret = -1; @@ -2274,6 +2297,7 @@ iscsit_handle_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, rx_size += ISCSI_CRC_LEN; } + WARN_ON_ONCE(niov > cmd->orig_iov_data_count); rx_got = rx_data(conn, &iov[0], niov, rx_size); if (rx_got != rx_size) goto reject; @@ -2588,8 +2612,9 @@ static int iscsit_handle_immediate_data( void *dump_buf = NULL; rx_size = min(cmd->se_cmd.data_length - cmd->write_data_done, length); - iov_ret = iscsit_map_iovec(cmd, cmd->iov_data, cmd->write_data_done, - rx_size); + iov_ret = iscsit_map_iovec(cmd, cmd->iov_data, + cmd->orig_iov_data_count - 2, + cmd->write_data_done, rx_size); if (iov_ret < 0) return IMMEDIATE_DATA_CANNOT_RECOVER; @@ -2624,6 +2649,7 @@ static int iscsit_handle_immediate_data( rx_size += ISCSI_CRC_LEN; } + WARN_ON_ONCE(iov_count > cmd->orig_iov_data_count); rx_got = rx_data(conn, &cmd->iov_data[0], iov_count, rx_size); kfree(dump_buf);