Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f429e8c7bb | ||
|
|
cba2e8cfef | ||
|
|
3ad67614aa |
@@ -1,12 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <BAN/Errors.h>
|
#include <BAN/Errors.h>
|
||||||
|
namespace Kernel {
|
||||||
namespace Kernel
|
|
||||||
{
|
|
||||||
|
|
||||||
BAN::ErrorOr<void> read_from_user(const void* user_addr, void* out, size_t size);
|
BAN::ErrorOr<void> read_from_user(const void* user_addr, void* out, size_t size);
|
||||||
BAN::ErrorOr<void> read_string_from_user(const char* user_addr, char* out, size_t max_size);
|
BAN::ErrorOr<void> read_string_from_user(const char* user_addr, char* out, size_t max_size);
|
||||||
BAN::ErrorOr<void> write_to_user(void* user_addr, const void* in, size_t size);
|
BAN::ErrorOr<void> write_to_user(void* user_addr, const void* in, size_t size);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
#include <kernel/Memory/Types.h>
|
|
||||||
#include <kernel/UserCopy.h>
|
#include <kernel/UserCopy.h>
|
||||||
|
|
||||||
extern "C" bool safe_user_memcpy(void*, const void*, size_t);
|
extern "C" bool safe_user_memcpy(void*, const void*, size_t);
|
||||||
extern "C" bool safe_user_strncpy(void*, const void*, size_t);
|
extern "C" bool safe_user_strncpy(void*, const void*, size_t);
|
||||||
|
|
||||||
namespace Kernel
|
|
||||||
{
|
|
||||||
|
|
||||||
static inline bool is_valid_user_address(const void* user_addr, size_t size)
|
static inline bool is_valid_user_address(const void* user_addr, size_t size)
|
||||||
{
|
{
|
||||||
const vaddr_t user_vaddr = reinterpret_cast<vaddr_t>(user_addr);
|
const vaddr_t user_vaddr = reinterpret_cast<vaddr_t>(user_addr);
|
||||||
@@ -16,8 +11,7 @@ static inline bool is_valid_user_address(const void* user_addr, size_t size)
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
BAN::ErrorOr<void> Kernel::read_from_user(const void* user_addr, void* out, size_t size)
|
||||||
BAN::ErrorOr<void> read_from_user(const void* user_addr, void* out, size_t size)
|
|
||||||
{
|
{
|
||||||
if (!is_valid_user_address(user_addr, size))
|
if (!is_valid_user_address(user_addr, size))
|
||||||
return BAN::Error::from_errno(EFAULT);
|
return BAN::Error::from_errno(EFAULT);
|
||||||
@@ -26,7 +20,7 @@ BAN::ErrorOr<void> read_from_user(const void* user_addr, void* out, size_t size)
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<void> read_string_from_user(const char* user_addr, char* out, size_t max_size)
|
BAN::ErrorOr<void> Kernel::read_string_from_user(const char* user_addr, char* out, size_t max_size)
|
||||||
{
|
{
|
||||||
max_size = BAN::Math::min<size_t>(max_size, USERSPACE_END - reinterpret_cast<vaddr_t>(user_addr));
|
max_size = BAN::Math::min<size_t>(max_size, USERSPACE_END - reinterpret_cast<vaddr_t>(user_addr));
|
||||||
if (!is_valid_user_address(user_addr, max_size))
|
if (!is_valid_user_address(user_addr, max_size))
|
||||||
@@ -36,7 +30,7 @@ BAN::ErrorOr<void> read_string_from_user(const char* user_addr, char* out, size_
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<void> write_to_user(void* user_addr, const void* in, size_t size)
|
BAN::ErrorOr<void> Kernel::write_to_user(void* user_addr, const void* in, size_t size)
|
||||||
{
|
{
|
||||||
if (!is_valid_user_address(user_addr, size))
|
if (!is_valid_user_address(user_addr, size))
|
||||||
return BAN::Error::from_errno(EFAULT);
|
return BAN::Error::from_errno(EFAULT);
|
||||||
@@ -44,5 +38,3 @@ BAN::ErrorOr<void> write_to_user(void* user_addr, const void* in, size_t size)
|
|||||||
return BAN::Error::from_errno(EFAULT);
|
return BAN::Error::from_errno(EFAULT);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user