linux/lib
Jens Axboe ee44bd07c4 UPSTREAM: iov_iter: add helper to save iov_iter state
[ Upstream commit 8fb0f47a9d ]

In an ideal world, when someone is passed an iov_iter and returns X bytes,
then X bytes would have been consumed/advanced from the iov_iter. But we
have use cases that always consume the entire iterator, a few examples
of that are iomap and bdev O_DIRECT. This means we cannot rely on the
state of the iov_iter once we've called ->read_iter() or ->write_iter().

This would be easier if we didn't always have to deal with truncate of
the iov_iter, as rewinding would be trivial without that. We recently
added a commit to track the truncate state, but that grew the iov_iter
by 8 bytes and wasn't the best solution.

Implement a helper to save enough of the iov_iter state to sanely restore
it after we've called the read/write iterator helpers. This currently
only works for IOVEC/BVEC/KVEC as that's all we need, support for other
iterator types are left as an exercise for the reader.

Link: https://lore.kernel.org/linux-fsdevel/CAHk-=wiacKV4Gh-MYjteU0LwNBSGpWrK-Ov25HdqB1ewinrFPg@mail.gmail.com/
Bug: 268174392
Change-Id: Iab4de49932dea2823db03bcef673f726bcef4a9f
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit e86db87191)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2023-02-07 13:38:07 +00:00
..
842
crypto UPSTREAM: crypto: lib - remove unneeded selection of XOR_BLOCKS 2022-11-16 14:48:59 +00:00
dim dim: initialize all struct fields 2022-05-18 10:23:44 +02:00
fonts
kunit kunit: make kunit_test_timeout compatible with comment 2022-04-08 14:40:04 +02:00
livepatch selftests/livepatch: better synchronize test_klp_callbacks_busy 2022-08-21 15:16:05 +02:00
lz4 lz4: fix LZ4_decompress_safe_partial read out of bound 2022-04-13 21:01:08 +02:00
lzo
math lib/math/rational.c: fix divide by zero 2021-07-14 16:56:51 +02:00
mpi lib/mpi: Add the return value check of kcalloc() 2022-01-27 10:54:02 +01:00
pldmfw
raid6 lib/raid6/test/Makefile: Use $(pound) instead of \# for Make 4.3 2022-04-08 14:40:31 +02:00
reed_solomon
vdso lib/vdso: use "grep -E" instead of "egrep" 2022-12-02 17:40:02 +01:00
xz lib/xz: Validate the value before assigning it to an enum variable 2021-11-18 14:03:58 +01:00
zlib_deflate
zlib_dfltcc
zlib_inflate
zstd
.gitignore
argv_split.c
ashldi3.c
ashrdi3.c
asn1_decoder.c
assoc_array.c assoc_array: Fix BUG_ON during garbage collect 2022-06-06 08:42:41 +02:00
atomic64_test.c
atomic64.c
audit.c
bcd.c
bch.c
bitfield_kunit.c
bitmap.c lib: bitmap: provide devm_bitmap_alloc() and devm_bitmap_zalloc() 2022-08-21 15:15:45 +02:00
bitrev.c
bootconfig.c
bsearch.c
btree.c
bucket_locks.c
bug.c
build_OID_registry
bust_spinlocks.c
check_signature.c
checksum.c
clz_ctz.c
clz_tab.c
cmdline.c
cmpdi2.c
compat_audit.c
cpu_rmap.c
cpumask.c
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc4.c
crc7.c
crc8.c
crc16.c
crc32.c
crc32defs.h
crc32test.c
crc64.c
ctype.c
debug_info.c
debug_locks.c
debugobjects.c
dec_and_lock.c
decompress_bunzip2.c
decompress_inflate.c
decompress_unlz4.c lib/decompress_unlz4.c: correctly handle zero-padding around initrds. 2021-07-20 16:05:46 +02:00
decompress_unlzma.c
decompress_unlzo.c
decompress_unxz.c lib/xz: Avoid overlapping memcpy() with invalid input with in-place decompression 2021-11-18 14:03:58 +01:00
decompress_unzstd.c
decompress.c
devres.c
digsig.c
dump_stack.c
dynamic_debug.c dyndbg: drop EXPORTed dynamic_debug_exec_queries 2022-10-26 13:25:34 +02:00
dynamic_queue_limits.c
earlycpio.c
errname.c
error-inject.c
errseq.c
extable.c
fault-inject-usercopy.c
fault-inject.c
fdt_addresses.c
fdt_empty_tree.c
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
fdt.c
find_bit_benchmark.c
find_bit.c
flex_proportions.c
gen_crc32table.c
gen_crc64table.c
genalloc.c
generic-radix-tree.c
glob.c
globtest.c
hexdump.c ANDROID: GKI: update the abi .xml file due to hex_to_bin() changes 2022-05-13 13:47:02 +02:00
hweight.c
idr.c ida: don't use BUG_ON() for debugging 2022-07-12 16:32:23 +02:00
inflate.c
interval_tree_test.c
interval_tree.c
iomap_copy.c
iomap.c
iommu-helper.c
iov_iter.c UPSTREAM: iov_iter: add helper to save iov_iter state 2023-02-07 13:38:07 +00:00
irq_poll.c
irq_regs.c
is_single_threaded.c
kasprintf.c
Kconfig This is the 5.10.124 stable release 2022-07-28 15:53:46 +02:00
Kconfig.debug BACKPORT: Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled 2022-12-09 12:14:48 +00:00
Kconfig.kasan UPSTREAM: kasan: fix Kconfig check of CC_HAS_WORKING_NOSANITIZE_ADDRESS 2022-11-09 13:57:12 +00:00
Kconfig.kcsan
Kconfig.kfence
Kconfig.kgdb
Kconfig.ubsan UPSTREAM: ubsan: remove overflow checks 2021-10-21 08:33:13 -07:00
kfifo.c
klist.c
kobject_uevent.c
kobject.c
kstrtox.c
kstrtox.h
libcrc32c.c
linear_ranges.c
list_debug.c lib/list_debug.c: Detect uninitialized lists 2022-08-25 11:38:18 +02:00
list_sort.c Revert "treewide: Change list_sort to use const pointers" 2021-10-04 11:07:40 +02:00
list-test.c
llist.c
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-rtmutex.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c lockdep/selftests: Fix selftests vs PROVE_RAW_LOCK_NESTING 2021-07-14 16:56:10 +02:00
lockref.c
logic_pio.c
lru_cache.c
lshrdi3.c
Makefile This is the 5.10.124 stable release 2022-07-28 15:53:46 +02:00
memcat_p.c
memneq.c crypto: memneq - move into lib/ 2022-06-22 14:13:18 +02:00
memory-notifier-error-inject.c
memregion.c
memweight.c
muldi3.c
net_utils.c
netdev-notifier-error-inject.c
nlattr.c
nmi_backtrace.c
nodemask.c nodemask: Fix return values to be unsigned 2022-06-14 18:32:45 +02:00
notifier-error-inject.c
notifier-error-inject.h
objagg.c
of-reconfig-notifier-error-inject.c
oid_registry.c
once.c This is the 5.10.150 stable release 2022-11-15 19:14:08 +00:00
packing.c
parman.c
parser.c
pci_iomap.c
percpu_counter.c
percpu_test.c
percpu-refcount.c percpu_ref_init(): clean ->percpu_count_ref on failure 2022-06-06 08:42:40 +02:00
plist.c
pm-notifier-error-inject.c
radix-tree.c
random32.c random: replace custom notifier chain with standard one 2022-05-30 09:33:38 +02:00
ratelimit.c ratelimit: Fix data-races in ___ratelimit(). 2022-08-31 17:15:20 +02:00
rbtree_test.c
rbtree.c
refcount.c
rhashtable.c
sbitmap.c
scatterlist.c
seq_buf.c seq_buf: Fix overflow in seq_buf_putmem_hex() 2021-07-19 09:45:00 +02:00
sg_pool.c
sg_split.c
sha1.c lib/crypto: sha1: re-roll loops to reduce code size 2022-05-30 09:33:26 +02:00
show_mem.c
siphash.c siphash: use one source of truth for siphash permutations 2022-05-30 09:33:43 +02:00
smp_processor_id.c lib/smp_processor_id: fix imbalanced instrumentation_end() call 2022-08-21 15:16:08 +02:00
sort.c
stackdepot.c
stmp_device.c
string_helpers.c
string.c
strncpy_from_user.c
strnlen_user.c
syscall.c
test_bitmap.c
test_bitops.c
test_bits.c
test_blackhole_dev.c
test_bpf.c test_bpf: fix incorrect netdev features 2022-08-21 15:15:41 +02:00
test_debug_virtual.c
test_firmware.c
test_fpu.c
test_free_pages.c
test_hash.c
test_hexdump.c
test_hmm_uapi.h
test_hmm.c mm/hmm.c: allow VM_MIXEDMAP to work with hmm_range_fault 2022-01-27 10:54:36 +01:00
test_ida.c
test_kasan_module.c
test_kasan.c
test_kmod.c lib/test: use after free in register_test_dev_kmod() 2022-04-08 14:40:30 +02:00
test_linear_ranges.c
test_list_sort.c Revert "treewide: Change list_sort to use const pointers" 2021-10-04 11:07:40 +02:00
test_lockup.c This is the 5.10.110 stable release 2022-04-18 17:41:18 +02:00
test_memcat_p.c
test_meminit.c lib/test_meminit: destroy cache in kmem_cache_alloc_bulk() test 2022-01-27 10:54:36 +01:00
test_min_heap.c
test_module.c
test_objagg.c
test_overflow.c
test_parman.c
test_printf.c
test_rhashtable.c
test_siphash.c
test_sort.c
test_stackinit.c lib/test_stackinit: Fix static initializer test 2021-09-18 13:40:37 +02:00
test_static_key_base.c
test_static_keys.c
test_string.c
test_strscpy.c
test_sysctl.c
test_ubsan.c This is the 5.10.111 stable release 2022-04-21 14:27:41 +02:00
test_user_copy.c
test_uuid.c
test_vmalloc.c
test_xarray.c XArray: Fix xas_create_range() when multi-order entry present 2022-04-08 14:40:40 +02:00
test-kstrtox.c
test-string_helpers.c
textsearch.c
timerqueue.c
ts_bm.c
ts_fsm.c
ts_kmp.c
ubsan.c UPSTREAM: ubsan: remove overflow checks 2021-10-21 08:33:13 -07:00
ubsan.h
ucmpdi2.c
ucs2_string.c
usercopy.c
uuid.c
vsprintf.c BACKPORT: vsprintf: Fix %pK with kptr_restrict == 0 2022-11-09 13:57:12 +00:00
win_minmax.c
xarray.c XArray: Update the LRU list in xas_split() 2022-04-08 14:40:40 +02:00
xxhash.c