Patch "s390/crash: add missing iterator advance in copy_oldmem_page()" has been added to the 5.18-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    s390/crash: add missing iterator advance in copy_oldmem_page()

to the 5.18-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     s390-crash-add-missing-iterator-advance-in-copy_oldm.patch
and it can be found in the queue-5.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 12e6ace7ec87872916ff1bb3fd63c4d6361cb69a
Author: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
Date:   Fri Jun 10 11:04:36 2022 +0200

    s390/crash: add missing iterator advance in copy_oldmem_page()
    
    [ Upstream commit cc02e6e21aa5f2ac0defe8c15e5a9d024da6e73d ]
    
    In case old memory was successfully copied the passed iterator
    should be advanced as well. Currently copy_oldmem_page() is
    always called with single-segment iterator. Should that ever
    change - copy_oldmem_user and copy_oldmem_kernel() functions
    would need a rework to deal with multi-segment iterators.
    
    Fixes: 5d8de293c224 ("vmcore: convert copy_oldmem_page() to take an iov_iter")
    Reviewed-by: Alexander Egorenkov <egorenar@xxxxxxxxxxxxx>
    Tested-by: Alexander Egorenkov <egorenar@xxxxxxxxxxxxx>
    Signed-off-by: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c
index a2c1c55daec0..2534a31d2550 100644
--- a/arch/s390/kernel/crash_dump.c
+++ b/arch/s390/kernel/crash_dump.c
@@ -219,6 +219,11 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
 	unsigned long src;
 	int rc;
 
+	if (!(iter_is_iovec(iter) || iov_iter_is_kvec(iter)))
+		return -EINVAL;
+	/* Multi-segment iterators are not supported */
+	if (iter->nr_segs > 1)
+		return -EINVAL;
 	if (!csize)
 		return 0;
 	src = pfn_to_phys(pfn) + offset;
@@ -228,6 +233,8 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
 		rc = copy_oldmem_user(iter->iov->iov_base, src, csize);
 	else
 		rc = copy_oldmem_kernel(iter->kvec->iov_base, src, csize);
+	if (!rc)
+		iov_iter_advance(iter, csize);
 	return rc;
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux