[iov_iter] fix iterate_all_kinds() on empty iterators
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 22 Dec 2016 02:55:02 +0000 (21:55 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 23 Dec 2016 04:00:22 +0000 (23:00 -0500)
commit33844e665104b169a3a7732bdcddb40e4f82b335
tree5432d8aeecc31c96696a19c56c0577d4499abdaa
parentc00d2c7e89880036f288a764599b2b8b87c0a364
[iov_iter] fix iterate_all_kinds() on empty iterators

Problem similar to ones dealt with in "fold checks into iterate_and_advance()"
and followups, except that in this case we really want to do nothing when
asked for zero-length operation - unlike zero-length iterate_and_advance(),
zero-length iterate_all_kinds() has no side effects, and callers are simpler
that way.

That got exposed when copy_from_iter_full() had been used by tipc, which
builds an msghdr with zero payload and (now) feeds it to a primitive
based on iterate_all_kinds() instead of iterate_and_advance().

Reported-by: Jon Maloy <jon.maloy@ericsson.com>
Tested-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
lib/iov_iter.c