Browse Source

pk: correctly restore sstatus.SUM in strcpy_from_user

pull/237/head
Andrew Waterman 5 years ago
parent
commit
96f98f0caa
  1. 10
      pk/usermem.c

10
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 strcpy_from_user(char* dst, const char* src, size_t n)
{ {
bool res = false;
uintptr_t sstatus = set_csr(sstatus, SSTATUS_SUM); uintptr_t sstatus = set_csr(sstatus, SSTATUS_SUM);
while (n > 0) { 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; char ch = *(volatile const char*)src;
*dst = ch; *dst = ch;
if (ch == 0) if (ch == 0) {
return true; res = true;
break;
}
src++; src++;
dst++; dst++;
@ -62,5 +66,5 @@ bool strcpy_from_user(char* dst, const char* src, size_t n)
write_csr(sstatus, sstatus); write_csr(sstatus, sstatus);
return false; return res;
} }

Loading…
Cancel
Save