From 96f98f0caac211ec8f7a573e7592212f674f7c81 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Mon, 29 Mar 2021 16:38:48 -0700 Subject: pk: correctly restore sstatus.SUM in strcpy_from_user --- pk/usermem.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pk/usermem.c b/pk/usermem.c index b65e515..cfe6f06 100644 --- a/pk/usermem.c +++ b/pk/usermem.c @@ -43,6 +43,8 @@ void memcpy_from_user(void* dst, const void* src, size_t n) bool strcpy_from_user(char* dst, const char* src, size_t n) { + bool res = false; + uintptr_t sstatus = set_csr(sstatus, SSTATUS_SUM); while (n > 0) { @@ -52,8 +54,10 @@ bool strcpy_from_user(char* dst, const char* src, size_t n) char ch = *(volatile const char*)src; *dst = ch; - if (ch == 0) - return true; + if (ch == 0) { + res = true; + break; + } src++; dst++; @@ -62,5 +66,5 @@ bool strcpy_from_user(char* dst, const char* src, size_t n) write_csr(sstatus, sstatus); - return false; + return res; } -- cgit v1.1