Add function for clearing user-space memory from the kernel.

This commit is contained in:
Jonas 'Sortie' Termansen 2014-01-11 23:07:45 +01:00
parent 5559377532
commit 0ac60d68ea
6 changed files with 26 additions and 30 deletions

View File

@ -1,6 +1,6 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2012.
Copyright(C) Jonas 'Sortie' Termansen 2012, 2014.
This file is part of Sortix.
@ -57,6 +57,17 @@ bool CopyFromKernel(void* kdst, const void* ksrc, size_t count)
return true;
}
bool ZeroKernel(void* kdst, size_t count)
{
memset(kdst, 0, count);
return true;
}
bool ZeroUser(void* userdst, size_t count)
{
return ZeroKernel(userdst, count);
}
char* GetStringFromUser(const char* str)
{
return String::Clone(str);

View File

@ -1,6 +1,6 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2013.
Copyright(C) Jonas 'Sortie' Termansen 2013, 2014.
This file is part of Sortix.
@ -70,18 +70,8 @@ off_t Full::lseek(ioctx_t* /*ctx*/, off_t offset, int /*whence*/)
ssize_t Full::read(ioctx_t* ctx, uint8_t* buf, size_t count)
{
const size_t ZERO_MEM_SIZE = 128;
uint8_t zero_mem[ZERO_MEM_SIZE];
memset(zero_mem, 0, ZERO_MEM_SIZE);
size_t sofar = 0;
while ( sofar < count )
{
size_t left = count - sofar;
size_t amount = left < ZERO_MEM_SIZE ? left : ZERO_MEM_SIZE;
ctx->copy_to_dest(buf + sofar, zero_mem, amount);
sofar += amount;
}
return (ssize_t) sofar;
ctx->zero_dest(buf, count);
return (ssize_t) count;
}
ssize_t Full::pread(ioctx_t* ctx, uint8_t* buf, size_t count, off_t /*off*/)

View File

@ -1,6 +1,6 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2013.
Copyright(C) Jonas 'Sortie' Termansen 2013, 2014.
This file is part of Sortix.
@ -69,18 +69,8 @@ off_t Zero::lseek(ioctx_t* /*ctx*/, off_t offset, int /*whence*/)
ssize_t Zero::read(ioctx_t* ctx, uint8_t* buf, size_t count)
{
const size_t ZERO_MEM_SIZE = 128;
uint8_t zero_mem[ZERO_MEM_SIZE];
memset(zero_mem, 0, ZERO_MEM_SIZE);
size_t sofar = 0;
while ( sofar < count )
{
size_t left = count - sofar;
size_t amount = left < ZERO_MEM_SIZE ? left : ZERO_MEM_SIZE;
ctx->copy_to_dest(buf + sofar, zero_mem, amount);
sofar += amount;
}
return (ssize_t) sofar;
ctx->zero_dest(buf, count);
return (ssize_t) count;
}
ssize_t Zero::pread(ioctx_t* ctx, uint8_t* buf, size_t count, off_t /*off*/)

View File

@ -1,6 +1,6 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2012.
Copyright(C) Jonas 'Sortie' Termansen 2012, 2014.
This file is part of Sortix.
@ -33,6 +33,8 @@ bool CopyToUser(void* userdst, const void* ksrc, size_t count);
bool CopyFromUser(void* kdst, const void* usersrc, size_t count);
bool CopyToKernel(void* kdst, const void* ksrc, size_t count);
bool CopyFromKernel(void* kdst, const void* ksrc, size_t count);
bool ZeroKernel(void* kdst, size_t count);
bool ZeroUser(void* userdst, size_t count);
char* GetStringFromUser(const char* str);
} // namespace Sortix

View File

@ -1,6 +1,6 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2012.
Copyright(C) Jonas 'Sortie' Termansen 2012, 2014.
This file is part of Sortix.
@ -37,6 +37,7 @@ struct ioctx_struct
gid_t gid, auth_gid;
bool (*copy_to_dest)(void* dest, const void* src, size_t n);
bool (*copy_from_src)(void* dest, const void* src, size_t n);
bool (*zero_dest)(void* dest, size_t n);
int dflags;
};

View File

@ -1,6 +1,6 @@
/*******************************************************************************
Copyright(C) Jonas 'Sortie' Termansen 2012, 2013.
Copyright(C) Jonas 'Sortie' Termansen 2012, 2013, 2014.
This file is part of Sortix.
@ -37,6 +37,7 @@ void SetupUserIOCtx(ioctx_t* ctx)
ctx->gid = ctx->auth_gid = process->gid;
ctx->copy_to_dest = CopyToUser;
ctx->copy_from_src = CopyFromUser;
ctx->zero_dest = ZeroUser;
ctx->dflags = 0;
}
@ -48,6 +49,7 @@ void SetupKernelIOCtx(ioctx_t* ctx)
ctx->gid = ctx->auth_gid = process->gid;
ctx->copy_to_dest = CopyToKernel;
ctx->copy_from_src = CopyFromKernel;
ctx->zero_dest = ZeroKernel;
ctx->dflags = 0;
}