On 7/7/22 10:11, Steffen Eiden wrote:
Hi Janosch,
On 7/6/22 08:40, Janosch Frank wrote:
Let's check if the UV really protected all the memory we donated.
Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx>
---
s390x/uv-host.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index a1a6d120..983cb4a1 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -43,6 +43,24 @@ static void cpu_loop(void)
for (;;) {}
}
+/*
+ * Checks if a memory area is protected as secure memory.
+ * Will return true if all pages are protected, false otherwise.
+ */
+static bool access_check_3d(uint64_t *access_ptr, uint64_t len)
+{
+ while (len) {
+ expect_pgm_int();
+ *access_ptr += 42;
+ if (clear_pgm_int() != PGM_INT_CODE_SECURE_STOR_ACCESS)
+ return false;
+ access_ptr += PAGE_SIZE / sizeof(access_ptr);
+ len -= PAGE_SIZE;
If someone uses this function with 'len' not being a multiple of
PAGE_SIZE this test does not for what is was intended by testing more
memory than expected.
I suggest adding an explicit assert at the beginning of the function
that ensures 'len' is a multiple of PAGE_SIZE.
Sure
+ }
+
+ return true;
+}
+
[snip]
Steffen