So looking at the various callers I'm not sure this API is the best. If we want to do something fancy I'd hide the struct iovec instances entirely with something like: struct iov_storage { struct iovec stack[UIO_FASTIOV], *vec; } int iov_iter_import_iovec(struct iov_iter *iter, struct iov_storage *s, const struct iovec __user *vec, unsigned long nr_segs, int type); and then add a new helper to free the thing if needed: void iov_iter_release_iovec(struct iov_storage *s) { if (s->vec != s->stack) kfree(s->vec); }