From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754076AbdGJNJY (ORCPT ); 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 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: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@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(-) 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; -- 2.9.0