diff options
Diffstat (limited to 'lib/iov_iter.c')
| -rw-r--r-- | lib/iov_iter.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 52c8dd6d8e82..1c1c06ddc20a 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -687,8 +687,10 @@ EXPORT_SYMBOL(_copy_from_iter_full_nocache);  static inline bool page_copy_sane(struct page *page, size_t offset, size_t n)  { -	size_t v = n + offset; -	if (likely(n <= v && v <= (PAGE_SIZE << compound_order(page)))) +	struct page *head = compound_head(page); +	size_t v = n + offset + page_address(page) - page_address(head); + +	if (likely(n <= v && v <= (PAGE_SIZE << compound_order(head))))  		return true;  	WARN_ON(1);  	return false; |