Commit 64ef3f61 authored by John Garry's avatar John Garry Committed by Long Li
Browse files

fs: xfs: Validate atomic writes

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9VTE3
CVE: NA

Reference: https://lore.kernel.org/all/20240326133813.3224593-1-john.g.garry@oracle.com/



--------------------------------

Validate that an atomic write adheres to length/offset rules. Since we
require extent alignment for atomic writes, this effectively also enforces
that the BIO which iomap produces is aligned.

Signed-off-by: default avatarJohn Garry <john.g.garry@oracle.com>
Signed-off-by: default avatarLong Li <leo.lilong@huawei.com>
parent d10050f6
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -586,6 +586,14 @@ xfs_file_dio_aio_write(
	size_t			count = iov_iter_count(from);
	struct xfs_buftarg      *target = xfs_inode_buftarg(ip);

	if (iocb->ki_flags & IOCB_ATOMIC) {
		if (!generic_atomic_write_valid(iocb->ki_pos, count,
			i_blocksize(inode),
			XFS_FSB_TO_B(mp, xfs_get_extsz(ip)))) {
			return -EINVAL;
		}
	}

	/* DIO must be aligned to device logical sector size */
	if ((iocb->ki_pos | count) & target->bt_logical_sectormask)
		return -EINVAL;