lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 16 Aug 2020 15:08:13 +0800 From: Coly Li <colyli@...e.de> To: linux-block@...r.kernel.org, linux-nvme@...ts.infradead.org Cc: netdev@...r.kernel.org, stable@...r.kernel.org, linux-kernel@...r.kernel.org, Coly Li <colyli@...e.de>, Chaitanya Kulkarni <chaitanya.kulkarni@....com>, Christoph Hellwig <hch@....de>, Hannes Reinecke <hare@...e.de>, Jan Kara <jack@...e.com>, Jens Axboe <axboe@...nel.dk>, Mikhail Skorzhinskii <mskorzhinskiy@...arflare.com>, Philipp Reisner <philipp.reisner@...bit.com>, Sagi Grimberg <sagi@...mberg.me>, Vlastimil Babka <vbabka@...e.com> Subject: [PATCH v5 2/3] nvme-tcp: check page by sendpage_ok() before calling kernel_sendpage() Currently nvme_tcp_try_send_data() doesn't use kernel_sendpage() to send slab pages. But for pages allocated by __get_free_pages() without __GFP_COMP, which also have refcount as 0, they are still sent by kernel_sendpage() to remote end, this is problematic. The new introduced helper sendpage_ok() checks both PageSlab tag and page_count counter, and returns true if the checking page is OK to be sent by kernel_sendpage(). This patch fixes the page checking issue of nvme_tcp_try_send_data() with sendpage_ok(). If sendpage_ok() returns true, send this page by kernel_sendpage(), otherwise use sock_no_sendpage to handle this page. Signed-off-by: Coly Li <colyli@...e.de> Cc: Chaitanya Kulkarni <chaitanya.kulkarni@....com> Cc: Christoph Hellwig <hch@....de> Cc: Hannes Reinecke <hare@...e.de> Cc: Jan Kara <jack@...e.com> Cc: Jens Axboe <axboe@...nel.dk> Cc: Mikhail Skorzhinskii <mskorzhinskiy@...arflare.com> Cc: Philipp Reisner <philipp.reisner@...bit.com> Cc: Sagi Grimberg <sagi@...mberg.me> Cc: Vlastimil Babka <vbabka@...e.com> Cc: stable@...r.kernel.org --- drivers/nvme/host/tcp.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 62fbaecdc960..902fe742762b 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -912,12 +912,11 @@ static int nvme_tcp_try_send_data(struct nvme_tcp_request *req) else flags |= MSG_MORE | MSG_SENDPAGE_NOTLAST; - /* can't zcopy slab pages */ - if (unlikely(PageSlab(page))) { - ret = sock_no_sendpage(queue->sock, page, offset, len, + if (sendpage_ok(page)) { + ret = kernel_sendpage(queue->sock, page, offset, len, flags); } else { - ret = kernel_sendpage(queue->sock, page, offset, len, + ret = sock_no_sendpage(queue->sock, page, offset, len, flags); } if (ret <= 0) -- 2.26.2
Powered by blists - more mailing lists