Go to file
Darrick J. Wong bdbc96c231 fsdax: dax_unshare_iter needs to copy entire blocks
[ Upstream commit 50793801fc ]

The code that copies data from srcmap to iomap in dax_unshare_iter is
very very broken, which bfoster's recent fsx changes have exposed.

If the pos and len passed to dax_file_unshare are not aligned to an
fsblock boundary, the iter pos and length in the _iter function will
reflect this unalignment.

dax_iomap_direct_access always returns a pointer to the start of the
kmapped fsdax page, even if its pos argument is in the middle of that
page.  This is catastrophic for data integrity when iter->pos is not
aligned to a page, because daddr/saddr do not point to the same byte in
the file as iter->pos.  Hence we corrupt user data by copying it to the
wrong place.

If iter->pos + iomap_length() in the _iter function not aligned to a
page, then we fail to copy a full block, and only partially populate the
destination block.  This is catastrophic for data confidentiality
because we expose stale pmem contents.

Fix both of these issues by aligning copy_pos/copy_len to a page
boundary (remember, this is fsdax so 1 fsblock == 1 base page) so that
we always copy full blocks.

We're not done yet -- there's no call to invalidate_inode_pages2_range,
so programs that have the file range mmap'd will continue accessing the
old memory mapping after the file metadata updates have completed.

Be careful with the return value -- if the unshare succeeds, we still
need to return the number of bytes that the iomap iter thinks we're
operating on.

Cc: ruansy.fnst@fujitsu.com
Fixes: d984648e42 ("fsdax,xfs: port unshare to fsdax")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Link: https://lore.kernel.org/r/172796813328.1131942.16777025316348797355.stgit@frogsfrogsfrogs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-08 16:26:42 +01:00
arch fs/proc/kcore.c: allow translation of physical memory addresses 2024-11-08 16:26:40 +01:00
block block, bfq: fix procress reference leakage for bfqq in merge chain 2024-11-01 01:56:02 +01:00
certs
crypto crypto: simd - Do not call crypto_alloc_tfm during registration 2024-10-17 15:21:39 +02:00
Documentation ASoC: dt-bindings: davinci-mcasp: Fix interrupt properties 2024-11-01 01:56:05 +01:00
drivers mlxsw: spectrum_ipip: Fix memory leak when changing remote IPv6 address 2024-11-08 16:26:42 +01:00
fs fsdax: dax_unshare_iter needs to copy entire blocks 2024-11-08 16:26:42 +01:00
include iomap: share iomap_unshare_iter predicate code with fsdax 2024-11-08 16:26:42 +01:00
init rust: fix the default format for CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT 2024-08-29 17:30:32 +02:00
io_uring io_uring/sqpoll: close race on waiting for sqring entries 2024-10-22 15:56:45 +02:00
ipc sysctl: treewide: drop unused argument ctl_table_root::set_ownership(table) 2024-08-11 12:35:51 +02:00
kernel bpf: Fix out-of-bounds write in trie_get_next_key() 2024-11-08 16:26:41 +01:00
lib maple_tree: correct tree corruption on spanning store 2024-10-22 15:56:44 +02:00
LICENSES
mm mm/swapfile: skip HugeTLB pages for unuse_vma 2024-10-22 15:56:43 +02:00
net netfilter: nft_payload: sanitize offset and length before calling skb_checksum() 2024-11-08 16:26:42 +01:00
rust rust: macros: provide correct provenance when constructing THIS_MODULE 2024-10-17 15:22:24 +02:00
samples bpf: Replace bpf_lpm_trie_key 0-length array with flexible array 2024-08-29 17:30:22 +02:00
scripts kconfig: qconf: fix buffer overflow in debug links 2024-10-17 15:22:03 +02:00
security selinux: improve error checking in sel_write_load() 2024-11-01 01:56:07 +01:00
sound ASoC: cs42l51: Fix some error handling paths in cs42l51_probe() 2024-11-08 16:26:41 +01:00
tools selftests/mm: fix incorrect buffer->mirror size in hmm2 double_map test 2024-11-08 16:26:39 +01:00
usr
virt KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin() 2024-06-27 13:46:21 +02:00
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore Remove *.orig pattern from .gitignore 2024-10-17 15:21:15 +02:00
.mailmap
.rustfmt.toml
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS MAINTAINERS: add leah to 6.1 MAINTAINERS file 2024-05-17 11:56:16 +02:00
Makefile Linux 6.1.115 2024-11-01 01:56:07 +01:00
README

Linux kernel

There are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML and PDF. Please read Documentation/admin-guide/README.rst first.

In order to build the documentation, use make htmldocs or make pdfdocs. The formatted documentation can also be read online at:

https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory, several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the requirements for building and running the kernel, and information about the problems which may result by upgrading your kernel.