summaryrefslogtreecommitdiffstats
path: root/lib/iov_iter.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2017-06-29 21:45:10 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2017-06-29 22:21:22 -0400
commitaa28de275a248879f9828cb9f7ee7e119c72ff96 (patch)
treeea50dff24c17d06ed9a799b38e8089996c3ccff2 /lib/iov_iter.c
parentb0377fedb6528087ed319b0d054d6ed82240372c (diff)
iov_iter/hardening: move object size checks to inlined part
There we actually have useful information about object sizes. Note: this patch has them done for all iov_iter flavours. Right now we do them twice in iovec case, but that'll change very shortly. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'lib/iov_iter.c')
-rw-r--r--lib/iov_iter.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index f835964c9485..bc4a63ebe91a 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -535,7 +535,7 @@ static size_t copy_pipe_to_iter(const void *addr, size_t bytes,
535 return bytes; 535 return bytes;
536} 536}
537 537
538size_t copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i) 538size_t _copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
539{ 539{
540 const char *from = addr; 540 const char *from = addr;
541 if (unlikely(i->type & ITER_PIPE)) 541 if (unlikely(i->type & ITER_PIPE))
@@ -550,9 +550,9 @@ size_t copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
550 550
551 return bytes; 551 return bytes;
552} 552}
553EXPORT_SYMBOL(copy_to_iter); 553EXPORT_SYMBOL(_copy_to_iter);
554 554
555size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) 555size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
556{ 556{
557 char *to = addr; 557 char *to = addr;
558 if (unlikely(i->type & ITER_PIPE)) { 558 if (unlikely(i->type & ITER_PIPE)) {
@@ -569,9 +569,9 @@ size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
569 569
570 return bytes; 570 return bytes;
571} 571}
572EXPORT_SYMBOL(copy_from_iter); 572EXPORT_SYMBOL(_copy_from_iter);
573 573
574bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i) 574bool _copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i)
575{ 575{
576 char *to = addr; 576 char *to = addr;
577 if (unlikely(i->type & ITER_PIPE)) { 577 if (unlikely(i->type & ITER_PIPE)) {
@@ -594,9 +594,9 @@ bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i)
594 iov_iter_advance(i, bytes); 594 iov_iter_advance(i, bytes);
595 return true; 595 return true;
596} 596}
597EXPORT_SYMBOL(copy_from_iter_full); 597EXPORT_SYMBOL(_copy_from_iter_full);
598 598
599size_t copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i) 599size_t _copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
600{ 600{
601 char *to = addr; 601 char *to = addr;
602 if (unlikely(i->type & ITER_PIPE)) { 602 if (unlikely(i->type & ITER_PIPE)) {
@@ -613,9 +613,9 @@ size_t copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
613 613
614 return bytes; 614 return bytes;
615} 615}
616EXPORT_SYMBOL(copy_from_iter_nocache); 616EXPORT_SYMBOL(_copy_from_iter_nocache);
617 617
618bool copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i) 618bool _copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i)
619{ 619{
620 char *to = addr; 620 char *to = addr;
621 if (unlikely(i->type & ITER_PIPE)) { 621 if (unlikely(i->type & ITER_PIPE)) {
@@ -637,7 +637,7 @@ bool copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i)
637 iov_iter_advance(i, bytes); 637 iov_iter_advance(i, bytes);
638 return true; 638 return true;
639} 639}
640EXPORT_SYMBOL(copy_from_iter_full_nocache); 640EXPORT_SYMBOL(_copy_from_iter_full_nocache);
641 641
642size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, 642size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes,
643 struct iov_iter *i) 643 struct iov_iter *i)
@@ -663,7 +663,7 @@ size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes,
663 } 663 }
664 if (i->type & (ITER_BVEC|ITER_KVEC)) { 664 if (i->type & (ITER_BVEC|ITER_KVEC)) {
665 void *kaddr = kmap_atomic(page); 665 void *kaddr = kmap_atomic(page);
666 size_t wanted = copy_from_iter(kaddr + offset, bytes, i); 666 size_t wanted = _copy_from_iter(kaddr + offset, bytes, i);
667 kunmap_atomic(kaddr); 667 kunmap_atomic(kaddr);
668 return wanted; 668 return wanted;
669 } else 669 } else