[PATCH] x86/sev: Adjust the alignment of vaddr_end

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

 



As vaddr is aligned down, vaddr_end accordingly needs to be aligned.
Otherwise, vaddr_end would be one page short. While at it, compute vaddr
and vaddr_end using kernel defined headers.

Fixes: dc3f3d2474b8 ("x86/mm: Validate memory when changing the C-bit")
Fixes: 5e5ccff60a29 ("x86/sev: Add helper for validating pages in early enc attribute changes")
Suggested-by: Nikunj Dadhania <nikunj.dadhania@xxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Pavan Kumar Paluri <papaluri@xxxxxxx>
---
 arch/x86/kernel/sev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c
index 679026a640ef..0f261cb306c3 100644
--- a/arch/x86/kernel/sev.c
+++ b/arch/x86/kernel/sev.c
@@ -648,8 +648,8 @@ static void pvalidate_pages(unsigned long vaddr, unsigned int npages, bool valid
 	unsigned long vaddr_end;
 	int rc;
 
-	vaddr = vaddr & PAGE_MASK;
-	vaddr_end = vaddr + (npages << PAGE_SHIFT);
+	vaddr_end = PAGE_ALIGN(vaddr + (npages << PAGE_SHIFT));
+	vaddr = PAGE_ALIGN_DOWN(vaddr);
 
 	while (vaddr < vaddr_end) {
 		rc = pvalidate(vaddr, RMP_PG_SIZE_4K, validate);
@@ -886,8 +886,8 @@ static void set_pages_state(unsigned long vaddr, unsigned int npages, int op)
 	if (!desc)
 		panic("SNP: failed to allocate memory for PSC descriptor\n");
 
-	vaddr = vaddr & PAGE_MASK;
-	vaddr_end = vaddr + (npages << PAGE_SHIFT);
+	vaddr_end = PAGE_ALIGN(vaddr + (npages << PAGE_SHIFT));
+	vaddr = PAGE_ALIGN_DOWN(vaddr);
 
 	while (vaddr < vaddr_end) {
 		/* Calculate the last vaddr that fits in one struct snp_psc_desc. */
-- 
2.25.1




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux