From b1c6ca3901733e7223756928f4dbc6d81db164e9 Mon Sep 17 00:00:00 2001 From: Jérôme Glisse Date: Tue, 16 Apr 2019 12:35:16 -0400 Subject: net/tls: keep track of pages that are coming from GUP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep track of pages that are coming from GUP (get_user_pages*()) so that we can call the appropriate put_user_page() for those. Signed-off-by: Jérôme Glisse Cc: iommu@lists.linux-foundation.org Cc: linux-fsdevel@vger.kernel.org Cc: linux-block@vger.kernel.org Cc: linux-mm@kvack.org Cc: netdev@vger.kernel.org Cc: John Hubbard Cc: Jan Kara Cc: Dan Williams Cc: Christoph Hellwig Cc: Thomas Hellstrom Cc: Sakari Ailus Cc: Jason Gunthorpe Cc: Boris Pismenny Cc: Aviad Yehezkel Cc: Dave Watson Cc: John Fastabend Cc: Daniel Borkmann --- net/tls/tls_sw.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 1de69e016c3d..4b4856590d57 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -1274,6 +1274,8 @@ static int tls_setup_from_iter(struct sock *sk, struct iov_iter *from, size_t offset; while (length > 0) { + bool from_gup; + i = 0; maxpages = to_max_pages - num_elem; if (maxpages == 0) { @@ -1288,6 +1290,7 @@ static int tls_setup_from_iter(struct sock *sk, struct iov_iter *from, goto out; } + from_gup = iov_iter_get_pages_use_gup(from); iov_iter_advance(from, copied); length -= copied; @@ -1295,8 +1298,12 @@ static int tls_setup_from_iter(struct sock *sk, struct iov_iter *from, while (copied) { use = min_t(int, copied, PAGE_SIZE - offset); - sg_set_page(&to[num_elem], - pages[i], use, offset); + if (from_gup) + sg_set_gup_page(&to[num_elem], + pages[i], use, offset); + else + sg_set_page(&to[num_elem], + pages[i], use, offset); sg_unmark_end(&to[num_elem]); /* We do not uncharge memory from this API */ -- cgit v1.2.3