Kernel: Use Userspace<T> in more syscalls

This commit is contained in:
Andreas Kling 2020-08-01 11:37:40 +02:00
parent 6c1ba09fbd
commit 8d4d1c7457
Notes: sideshowbarker 2024-07-19 04:24:41 +09:00
4 changed files with 11 additions and 15 deletions

View file

@ -185,11 +185,11 @@ public:
int sys$yield();
int sys$sync();
int sys$beep();
int sys$get_process_name(char* buffer, int buffer_size);
int sys$set_process_name(const char* user_name, size_t user_name_length);
int sys$watch_file(const char* path, size_t path_length);
int sys$get_process_name(Userspace<char*> buffer, size_t buffer_size);
int sys$set_process_name(Userspace<const char*> user_name, size_t user_name_length);
int sys$watch_file(Userspace<const char*> path, size_t path_length);
int sys$dbgputch(u8);
int sys$dbgputstr(const u8*, int length);
int sys$dbgputstr(Userspace<const u8*>, int length);
int sys$dump_backtrace();
int sys$gettid();
int sys$donate(int tid);
@ -445,8 +445,7 @@ public:
[[nodiscard]] String validate_and_copy_string_from_user(Userspace<const char*> user_characters, size_t size) const
{
return validate_and_copy_string_from_user(user_characters.unsafe_userspace_ptr(), size);
}
return validate_and_copy_string_from_user(user_characters.unsafe_userspace_ptr(), size); }
[[nodiscard]] String validate_and_copy_string_from_user(const Syscall::StringArgument&) const;

View file

@ -42,7 +42,7 @@ int Process::sys$dbgputch(u8 ch)
return 0;
}
int Process::sys$dbgputstr(const u8* characters, int length)
int Process::sys$dbgputstr(Userspace<const u8*> characters, int length)
{
if (!length)
return 0;
@ -50,7 +50,7 @@ int Process::sys$dbgputstr(const u8* characters, int length)
return -EFAULT;
SmapDisabler disabler;
for (int i = 0; i < length; ++i)
IO::out8(0xe9, characters[i]);
IO::out8(0xe9, characters.unsafe_userspace_ptr()[i]);
return 0;
}

View file

@ -55,23 +55,20 @@ int Process::sys$set_process_icon(int icon_id)
return 0;
}
int Process::sys$get_process_name(char* buffer, int buffer_size)
int Process::sys$get_process_name(Userspace<char*> buffer, size_t buffer_size)
{
REQUIRE_PROMISE(stdio);
if (buffer_size <= 0)
return -EINVAL;
if (!validate_write(buffer, buffer_size))
return -EFAULT;
if (m_name.length() + 1 > (size_t)buffer_size)
if (m_name.length() + 1 > buffer_size)
return -ENAMETOOLONG;
copy_to_user(buffer, m_name.characters(), m_name.length() + 1);
return 0;
}
int Process::sys$set_process_name(const char* user_name, size_t user_name_length)
int Process::sys$set_process_name(Userspace<const char*> user_name, size_t user_name_length)
{
REQUIRE_PROMISE(proc);
if (user_name_length > 256)

View file

@ -31,7 +31,7 @@
namespace Kernel {
int Process::sys$watch_file(const char* user_path, size_t path_length)
int Process::sys$watch_file(Userspace<const char*> user_path, size_t path_length)
{
REQUIRE_PROMISE(rpath);
auto path = get_syscall_path_argument(user_path, path_length);