David Howells
f443fd5af5
crypto, cifs: fix error handling in extract_iter_to_sg()
...
Fix error handling in extract_iter_to_sg(). Pages need to be unpinned, not
put in extract_user_to_sg() when handling IOVEC/UBUF sources.
The bug may result in a warning like the following:
WARNING: CPU: 1 PID: 20384 at mm/gup.c:229 __lse_atomic_add arch/arm64/include/asm/atomic_lse.h:27 [inline]
WARNING: CPU: 1 PID: 20384 at mm/gup.c:229 arch_atomic_add arch/arm64/include/asm/atomic.h:28 [inline]
WARNING: CPU: 1 PID: 20384 at mm/gup.c:229 raw_atomic_add include/linux/atomic/atomic-arch-fallback.h:537 [inline]
WARNING: CPU: 1 PID: 20384 at mm/gup.c:229 atomic_add include/linux/atomic/atomic-instrumented.h:105 [inline]
WARNING: CPU: 1 PID: 20384 at mm/gup.c:229 try_grab_page+0x108/0x160 mm/gup.c:252
...
pc : try_grab_page+0x108/0x160 mm/gup.c:229
lr : follow_page_pte+0x174/0x3e4 mm/gup.c:651
...
Call trace:
__lse_atomic_add arch/arm64/include/asm/atomic_lse.h:27 [inline]
arch_atomic_add arch/arm64/include/asm/atomic.h:28 [inline]
raw_atomic_add include/linux/atomic/atomic-arch-fallback.h:537 [inline]
atomic_add include/linux/atomic/atomic-instrumented.h:105 [inline]
try_grab_page+0x108/0x160 mm/gup.c:252
follow_pmd_mask mm/gup.c:734 [inline]
follow_pud_mask mm/gup.c:765 [inline]
follow_p4d_mask mm/gup.c:782 [inline]
follow_page_mask+0x12c/0x2e4 mm/gup.c:839
__get_user_pages+0x174/0x30c mm/gup.c:1217
__get_user_pages_locked mm/gup.c:1448 [inline]
__gup_longterm_locked+0x94/0x8f4 mm/gup.c:2142
internal_get_user_pages_fast+0x970/0xb60 mm/gup.c:3140
pin_user_pages_fast+0x4c/0x60 mm/gup.c:3246
iov_iter_extract_user_pages lib/iov_iter.c:1768 [inline]
iov_iter_extract_pages+0xc8/0x54c lib/iov_iter.c:1831
extract_user_to_sg lib/scatterlist.c:1123 [inline]
extract_iter_to_sg lib/scatterlist.c:1349 [inline]
extract_iter_to_sg+0x26c/0x6fc lib/scatterlist.c:1339
hash_sendmsg+0xc0/0x43c crypto/algif_hash.c:117
sock_sendmsg_nosec net/socket.c:725 [inline]
sock_sendmsg+0x54/0x60 net/socket.c:748
____sys_sendmsg+0x270/0x2ac net/socket.c:2494
___sys_sendmsg+0x80/0xdc net/socket.c:2548
__sys_sendmsg+0x68/0xc4 net/socket.c:2577
__do_sys_sendmsg net/socket.c:2586 [inline]
__se_sys_sendmsg net/socket.c:2584 [inline]
__arm64_sys_sendmsg+0x24/0x30 net/socket.c:2584
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x48/0x114 arch/arm64/kernel/syscall.c:52
el0_svc_common.constprop.0+0x44/0xe4 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x38/0xa4 arch/arm64/kernel/syscall.c:191
el0_svc+0x2c/0xb0 arch/arm64/kernel/entry-common.c:647
el0t_64_sync_handler+0xc0/0xc4 arch/arm64/kernel/entry-common.c:665
el0t_64_sync+0x19c/0x1a0 arch/arm64/kernel/entry.S:591
Link: https://lkml.kernel.org/r/20571.1690369076@warthog.procyon.org.uk
Fixes: 018584697533 ("netfs: Add a function to extract an iterator into a scatterlist")
Reported-by: syzbot+9b82859567f2e50c123e@syzkaller.appspotmail.com
Link: https://lore.kernel.org/linux-mm/000000000000273d0105ff97bf56@google.com/
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Acked-by: Steve French <stfrench@microsoft.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Jeff Layton <jlayton@kernel.org>
Cc: Shyam Prasad N <nspmangalore@gmail.com>
Cc: Rohith Surabattula <rohiths.msft@gmail.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2023-08-04 13:03:40 -07:00
..
2020-08-10 01:32:59 +09:00
2023-06-30 21:27:13 -07:00
2023-05-09 11:06:45 +02:00
2022-11-18 13:55:09 -08:00
2023-06-28 10:59:38 -07:00
2022-06-15 10:29:10 +02:00
2022-07-17 17:31:39 -07:00
2022-07-29 18:12:34 -07:00
2022-11-21 14:30:53 -07:00
2023-01-06 17:15:46 +08:00
2023-04-13 13:13:53 -07:00
2023-06-13 15:13:20 -07:00
2022-11-18 02:15:15 +01:00
2022-02-13 16:50:06 -08:00
2023-03-21 21:15:34 +01:00
2021-10-19 23:44:30 +08:00
2023-02-27 17:00:14 -08:00
2023-02-02 22:50:10 -08:00
2023-02-02 22:50:09 -08:00
2023-06-09 17:44:13 -07:00
2022-04-26 17:58:51 -04:00
2020-11-18 14:15:17 -06:00
2022-01-20 08:52:55 +02:00
2022-06-01 18:29:06 -07:00
2021-12-13 10:56:09 +01:00
2021-10-01 16:52:48 -04:00
2022-08-02 17:14:47 -06:00
2021-05-06 19:24:12 -07:00
2020-10-16 13:25:14 -06:00
2023-06-22 13:57:41 -07:00
2022-04-26 17:58:51 -04:00
2022-04-26 17:58:51 -04:00
2020-06-11 15:14:53 +02:00
2023-04-13 13:13:54 -07:00
2023-01-31 15:01:45 +01:00
2023-04-08 13:45:37 -07:00
2022-09-01 16:55:35 +02:00
2023-05-25 10:55:18 -07:00
2020-08-20 15:45:14 -04:00
2022-10-11 17:42:58 -06:00
2022-09-11 21:55:06 -07:00
2021-10-01 16:52:48 -04:00
2023-06-07 21:25:00 -07:00
2023-03-05 14:30:34 -08:00
2023-06-22 13:57:41 -07:00
2021-01-21 14:06:00 -07:00
2021-05-06 19:24:12 -07:00
2022-01-31 11:21:43 +11:00
2022-01-31 11:21:43 +11:00
2022-03-07 12:48:35 -07:00
2022-03-07 12:48:35 -07:00
2022-06-07 10:27:38 +02:00
2020-06-18 17:26:43 +10:00
2021-08-19 09:02:55 +09:00
2021-06-22 13:56:43 +02:00
2023-06-07 14:16:12 +02:00
2023-01-31 20:37:18 +01:00
2021-07-01 11:06:05 -07:00
2023-06-09 17:44:17 -07:00
2021-07-01 11:06:06 -07:00
2021-05-06 19:24:12 -07:00
2021-07-01 11:06:06 -07:00
2023-06-09 17:44:17 -07:00
2023-06-09 17:44:17 -07:00
2020-07-31 11:49:08 +02:00
2023-06-09 17:44:15 -07:00
2023-06-23 17:04:04 -07:00
2023-07-08 09:29:32 -07:00
2023-02-02 22:50:01 -08:00
2023-03-23 17:18:35 -07:00
2023-02-02 22:50:01 -08:00
2020-11-20 14:45:33 +11:00
2022-04-22 21:30:57 +02:00
2023-03-09 12:58:36 -08:00
2020-10-16 11:11:20 -07:00
2022-09-11 21:55:10 -07:00
2023-02-15 15:44:43 +01:00
2023-02-02 22:50:00 -08:00
2020-12-15 22:46:15 -08:00
2021-01-03 20:05:18 -05:00
2020-10-16 11:11:22 -07:00
2023-04-13 07:38:54 -06:00
2020-01-08 16:59:19 +00:00
2022-11-18 02:15:15 +01:00
2023-03-19 10:02:04 -07:00
2022-09-19 14:35:08 +02:00
2023-07-03 12:50:26 -07:00
2022-03-07 12:48:35 -07:00
2023-07-26 09:45:01 +02:00
2019-10-14 15:04:00 -07:00
2022-04-29 14:38:01 -07:00
2023-04-21 03:02:31 -04:00
2023-02-08 14:28:17 -07:00
2022-04-27 10:57:33 -07:00
2022-07-10 13:55:49 -07:00
2022-11-29 16:34:15 -04:00
2022-10-03 14:03:21 -07:00
2023-07-10 09:52:28 +02:00
2022-04-13 21:32:21 +02:00
2022-11-19 00:56:15 +01:00
2021-08-19 09:02:55 +09:00
2023-04-05 22:15:19 +02:00
2023-07-08 12:08:39 -07:00
2023-03-02 21:54:22 -08:00
2023-02-25 13:02:20 -08:00
2022-03-22 15:57:11 -07:00
2022-10-11 12:01:24 +02:00
2022-11-08 15:57:24 -08:00
2023-05-17 12:01:54 -07:00
2021-07-08 11:48:20 -07:00
2021-12-28 11:26:18 +01:00
2023-06-05 15:31:12 -07:00
2022-05-13 07:20:13 -07:00
2021-05-19 15:05:11 +02:00
2023-04-17 18:01:23 +02:00
2021-08-13 18:37:38 +02:00
2022-06-16 19:58:20 -07:00
2021-07-08 11:48:20 -07:00
2023-03-31 09:21:35 -06:00
2022-11-18 13:55:06 -08:00
2021-12-04 10:56:24 +01:00
2023-01-13 14:35:38 -06:00
2022-03-11 10:42:56 +01:00
2021-02-17 17:31:06 -06:00
2022-11-22 19:38:39 -07:00
2023-06-28 10:28:11 -07:00
2023-07-17 12:53:22 -07:00
2023-01-25 12:24:40 -08:00
2020-09-26 10:33:57 -07:00
2023-06-06 13:18:32 +02:00
2023-01-20 17:52:32 -08:00
2023-01-19 15:55:12 -08:00
2022-11-30 16:13:16 -08:00
2021-12-24 14:54:29 -08:00
2022-11-18 13:55:06 -08:00
2022-10-03 17:34:32 -07:00
2023-05-26 13:52:19 -07:00
2023-03-09 23:08:04 -08:00
2021-04-16 16:10:37 -07:00
2023-03-02 21:54:22 -08:00
2021-09-19 17:13:35 -07:00
2023-03-19 10:02:04 -07:00
2022-11-30 13:16:40 -08:00
2022-05-22 11:32:30 -07:00
2023-06-12 11:31:50 -07:00
2023-06-12 11:31:50 -07:00
2022-10-11 17:42:58 -06:00
2022-08-24 13:46:57 +01:00
2019-09-25 17:51:39 -07:00
2023-04-18 16:39:33 -07:00
2023-03-28 10:39:29 +02:00
2023-06-05 15:28:42 -07:00
2021-07-08 11:48:20 -07:00
2022-12-09 10:42:56 +00:00
2023-07-21 11:40:20 -06:00
2023-08-04 13:03:40 -07:00
2023-04-25 21:03:14 -04:00
2022-09-23 16:46:19 +02:00
2019-08-08 07:45:01 -06:00
2022-11-01 10:04:52 -07:00
2022-06-03 10:34:34 -07:00
2022-12-12 16:42:57 -08:00
2022-07-17 17:31:41 -07:00
2022-03-17 20:17:18 -07:00
2023-03-28 16:20:13 -07:00
2023-02-10 17:32:37 -08:00
2023-05-16 14:08:02 -07:00
2023-06-05 15:31:12 -07:00
2023-06-01 11:24:50 -07:00
2022-04-19 21:58:47 +02:00
2022-04-19 21:58:47 +02:00
2022-11-01 10:04:52 -07:00
2021-06-18 11:43:09 +02:00
2023-06-22 13:57:41 -07:00
2021-07-08 11:48:20 -07:00
2020-08-12 10:58:00 -07:00
2023-05-31 12:58:38 +02:00
2022-09-07 17:04:49 +02:00
2023-06-15 13:42:18 +02:00
2023-06-06 21:39:55 +09:00
2021-01-18 11:03:26 +01:00
2022-07-17 17:14:36 -07:00
2022-01-20 08:52:54 +02:00
2022-11-18 02:18:02 +01:00
2022-10-12 18:51:50 -07:00
2022-10-12 18:51:50 -07:00
2023-01-25 14:07:21 -08:00
2023-02-21 08:52:42 +09:00
2022-11-16 13:32:32 +00:00
2022-11-18 02:15:15 +01:00
2022-02-25 09:36:06 +01:00
2023-07-17 12:53:22 -07:00
2022-10-12 18:51:49 -07:00
2022-10-11 17:42:58 -06:00
2022-10-11 17:42:58 -06:00
2023-03-28 16:20:09 -07:00
2023-06-05 15:28:42 -07:00
2022-12-13 15:47:48 -08:00
2021-09-06 11:04:03 -07:00
2021-09-08 11:50:26 -07:00
2022-04-29 14:38:00 -07:00
2023-06-18 02:32:54 -07:00
2022-01-20 08:52:55 +02:00
2019-10-16 14:56:21 +02:00
2023-06-12 11:31:51 -07:00
2022-03-28 19:25:11 -04:00
2023-04-08 13:45:39 -07:00
2019-10-03 12:12:23 -04:00
2021-02-17 14:08:01 +01:00
2022-11-21 22:02:10 +01:00
2023-06-26 13:26:39 +02:00
2020-11-18 14:15:17 -06:00
2020-04-07 10:43:43 -07:00
2023-05-30 16:42:01 -07:00
2023-05-30 16:42:01 -07:00
2023-02-21 14:45:22 -08:00
2022-10-11 17:42:58 -06:00
2023-04-27 19:42:02 -07:00
2023-01-11 16:14:21 -08:00
2023-06-12 11:31:50 -07:00
2020-08-12 10:58:00 -07:00