mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Add function for clearing user-space memory from the kernel.
This commit is contained in:
parent
5559377532
commit
0ac60d68ea
6 changed files with 26 additions and 30 deletions
|
@ -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);
|
||||
|
|
|
@ -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*/)
|
||||
|
|
|
@ -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*/)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue