diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2017-06-29 21:45:10 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2017-06-29 22:21:22 -0400 |
commit | aa28de275a248879f9828cb9f7ee7e119c72ff96 (patch) | |
tree | ea50dff24c17d06ed9a799b38e8089996c3ccff2 /lib/iov_iter.c | |
parent | b0377fedb6528087ed319b0d054d6ed82240372c (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.c | 22 |
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 | ||
538 | size_t copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i) | 538 | size_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 | } |
553 | EXPORT_SYMBOL(copy_to_iter); | 553 | EXPORT_SYMBOL(_copy_to_iter); |
554 | 554 | ||
555 | size_t copy_from_iter(void *addr, size_t bytes, struct iov_iter *i) | 555 | size_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 | } |
572 | EXPORT_SYMBOL(copy_from_iter); | 572 | EXPORT_SYMBOL(_copy_from_iter); |
573 | 573 | ||
574 | bool copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i) | 574 | bool _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 | } |
597 | EXPORT_SYMBOL(copy_from_iter_full); | 597 | EXPORT_SYMBOL(_copy_from_iter_full); |
598 | 598 | ||
599 | size_t copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i) | 599 | size_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 | } |
616 | EXPORT_SYMBOL(copy_from_iter_nocache); | 616 | EXPORT_SYMBOL(_copy_from_iter_nocache); |
617 | 617 | ||
618 | bool copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i) | 618 | bool _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 | } |
640 | EXPORT_SYMBOL(copy_from_iter_full_nocache); | 640 | EXPORT_SYMBOL(_copy_from_iter_full_nocache); |
641 | 641 | ||
642 | size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, | 642 | size_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 |