From patchwork Mon Jul 10 13:08:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 107292 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp3398913qge; Mon, 10 Jul 2017 06:09:35 -0700 (PDT) X-Received: by 10.84.194.228 with SMTP id h91mr18106922pld.46.1499692175713; Mon, 10 Jul 2017 06:09:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499692175; cv=none; d=google.com; s=arc-20160816; b=FsoPfrFH5T7mppkC3BFdU3rSSanTRlLTkOq0XmQGoWslXEclJ0Cz9vg6ySVEYI09fm ShVTNLETBmdvEV+QdAvApJx4vQf+8CFGPiYsQynHx0qGEe2iIyZk7BPjeMJzfsu0H7Wj NHh9KYcpRNqK7jnVUv0s5VbtZ7oBjrczjcB5WEUU6OLr2OSN+QzB3sHo+5tjlgP4UO0d qCtigrBmJ18wlZlYxH78YbAGcn7R0M6JregnUTiIMnNr0/J1u7O5FSMn8UkZd+rwbZM9 dH2+OfuppcwpP5eyb3o0aBlzfUs7Sx1dBipy/jCX7J37YzFX6ttxJnqoQgvreAUlhpc/ 4CtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=bJv6W7xzhTxLlI1qJ7TJ1ZH8jhE0Dt2DLQ2u9QO/OgE=; b=lW1SWn6LIiMoKisjX4qKbC9a3K9rkuXJtHay09v1z7MTgKcMf0WwQnTqWVB/TIFupR 4+bEOABRF7ZcZeLXIZpxyvSSF6Ipu/cKafFbQgCbIj/zBKeIrY7LzkcSl9fjme+AyXRR Q/G4EsVyt+d3CkTpspqHjICIAHyH+sUImQyhA/UL96iSCQlTZRLNSTYGPrhC8MR/kHkb QumrZmm0L2YzUv0aT3dNprtGWCLofbNKitDyTFpbrvy+tw1a20w0OL9LVXtmu9gwSXRD HRdsB7+Cde5aiIbXjV0A/3YiFR+bF+L8MeOHKm5zP5O9a0USuVgcf2nLroc/KTs2klo5 hvuQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-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 g3si8946232pld.496.2017.07.10.06.09.35; Mon, 10 Jul 2017 06:09:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754029AbdGJNJY (ORCPT + 6 others); Mon, 10 Jul 2017 09:09:24 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:50422 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754003AbdGJNJW (ORCPT ); Mon, 10 Jul 2017 09:09:22 -0400 Received: from wuerfel.lan ([5.56.224.194]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.129]) with ESMTPA (Nemesis) id 0MSFeJ-1d5QEy2LD1-00TQrb; Mon, 10 Jul 2017 15:08:43 +0200 From: Arnd Bergmann To: Oleg Drokin , Andreas Dilger , James Simmons Cc: Arnd Bergmann , stable@vger.kernel.org, Greg Kroah-Hartman , Doug Oucharek , Dmitry Eremin , Al Viro , Liang Zhen , Nicholas Hanley , lustre-devel@lists.lustre.org, devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org Subject: [PATCH] lustre: check copy_from_iter/copy_to_iter return code Date: Mon, 10 Jul 2017 15:08:03 +0200 Message-Id: <20170710130833.1834210-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:L0OMA3+fpFuJcHPXUHejBl7AwvtiB4vQw6LlNS/cJpBsM4TEIpE e4AmlJy7psvp2B4eoZVXN+W3t9cMEqP4n4/xGGIBxdtPu5UHr6LlIsalG6+LEP5E1Ssurt/ QM9D20o/1NbKUHIYD/I6t8/lc2HddQ8s3r3aUvFfgQV6l4T7ls4Jz4nXcSIJ0X+jwUia7Lj ymBJCYjJJLlRBMNpafYmQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:2irYzTn2QXE=:iUuHfeWmQYvyLjWH83PlHg Y07RVHGFdNYh+7JPpyqUpHcYguGm8b+x8tpq7sS7aK6Ey0h670OlLqDo0XlECvQpU/mgfDsyS ke9tvPBiIulKK0xZkLXPZkKMU3geYWsMhzYRozVvclYbzhJ9nUqRX0WRuPmWWH6CCGyffq/tA Vs78b9SSrLJsGnzru6MXxte3aFLMnxGCP7+epy7bn0mjHtehSI4xqNRhUWBDBsAwIr/zFz9et 2eOLEwHFZ1xMIfzynpY2ooNO2cmxZmY+LVqEvenB5NFLR2wbAGXOZlhd6JYu+ReDR+SZFBgQn kP3l9VttmGCQj4uKUeF0wh72uoDO7FrTUdN+SJoU1kazZfLnebUxn325Mn/plNVV9N0W0qYO2 VoRcrll+z7jMgRkPNtLgma0UDnjjEpXCmvelFgFwWIaHN9oLovHel2oZ/G7j3wsUI2Z3dQVVE EJrToJQ1gS6rH2kEfUXJo56gnssFEOGJihG+CJ4imLV8sw/0zjaxFvmyPr6xBacZrUOIAhewf Bo/TqP351b2aEYyYR1ggvsSHg3lIzFgAMEORlY+amzWauBbP+qcHs7u8xwFPW3/mnGfPfp7Wy bb+se9CIrzduiv1ExrfcJzjkAY/65ONkqgFoqBKqJQeMnFfjvGyq58sw+eISrkM0AT4h29xYP uzLKLFGxb9GzsxlkLLFcaPFsiylw/sTnqbjvlXc8DmY2ho6MHNAM1mGs1+l3PlUHjMa0= Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org We now get a helpful warning for code that calls copy_{from,to}_iter without checking the return value, introduced by commit aa28de275a24 ("iov_iter/hardening: move object size checks to inlined part"). drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c: In function 'kiblnd_send': drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c:1643:2: error: ignoring return value of 'copy_from_iter', declared with attribute warn_unused_result [-Werror=unused-result] drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c: In function 'kiblnd_recv': drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c:1744:3: error: ignoring return value of 'copy_to_iter', declared with attribute warn_unused_result [-Werror=unused-result] In case we get short copies here, we may get incorrect behavior. I've added failure handling for both rx and tx now, returning -EFAULT as expected. Cc: stable@vger.kernel.org Signed-off-by: Arnd Bergmann --- This warning now shows up in 'allmodconfig' builds, so it would be good to get it fixed quickly for 4.13, but my patch should not go in without careful review since I'm not familiar with with code and the error handling is a bit tricky here. I added 'Cc: stable' since this is a preexisting condition that we only started warning about now. --- drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) -- 2.9.0 diff --git a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c index 85b242ec5f9b..70256a0ffd2e 100644 --- a/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -1640,8 +1640,13 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) ibmsg = tx->tx_msg; ibmsg->ibm_u.immediate.ibim_hdr = *hdr; - copy_from_iter(&ibmsg->ibm_u.immediate.ibim_payload, IBLND_MSG_SIZE, + rc = copy_from_iter(&ibmsg->ibm_u.immediate.ibim_payload, IBLND_MSG_SIZE, &from); + if (rc != IBLND_MSG_SIZE) { + kiblnd_pool_free_node(&tx->tx_pool->tpo_pool, &tx->tx_list); + return -EFAULT; + } + nob = offsetof(struct kib_immediate_msg, ibim_payload[payload_nob]); kiblnd_init_tx_msg(ni, tx, IBLND_MSG_IMMEDIATE, nob); @@ -1741,8 +1746,14 @@ kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg, break; } - copy_to_iter(&rxmsg->ibm_u.immediate.ibim_payload, + rc = copy_to_iter(&rxmsg->ibm_u.immediate.ibim_payload, IBLND_MSG_SIZE, to); + if (rc != IBLND_MSG_SIZE) { + rc = -EFAULT; + break; + } + + rc = 0; lnet_finalize(ni, lntmsg, 0); break;