1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-10 18:10:56 +09:00

Kernel: Use Userspace<T> for the getpeername syscall

This commit is contained in:
Brian Gianforcaro 2020-08-07 00:00:17 -07:00 committed by Andreas Kling
parent 0db669a9d2
commit dc75ea9fc2
Notes: sideshowbarker 2024-07-19 04:10:02 +09:00
3 changed files with 11 additions and 4 deletions

View file

@ -326,8 +326,8 @@ struct SC_getsockname_params {
struct SC_getpeername_params {
int sockfd;
sockaddr* addr;
socklen_t* addrlen;
Userspace<sockaddr*> addr;
Userspace<socklen_t*> addrlen;
};
struct SC_futex_params {

View file

@ -298,7 +298,7 @@ public:
int sys$getsockopt(const Syscall::SC_getsockopt_params*);
int sys$setsockopt(const Syscall::SC_setsockopt_params*);
int sys$getsockname(const Syscall::SC_getsockname_params*);
int sys$getpeername(const Syscall::SC_getpeername_params*);
int sys$getpeername(Userspace<const Syscall::SC_getpeername_params*>);
int sys$sched_setparam(pid_t pid, Userspace<const struct sched_param*>);
int sys$sched_getparam(pid_t pid, Userspace<struct sched_param*>);
int sys$create_thread(void* (*)(void*), Userspace<const Syscall::SC_create_thread_params*>);
@ -422,6 +422,13 @@ public:
return validated;
}
template<typename T>
[[nodiscard]] bool validate_read_and_copy_typed(T* dest, Userspace<T*> src)
{
Userspace<const T*> const_src { src.ptr() };
return validate_read_and_copy_typed(dest, const_src);
}
template<typename T>
[[nodiscard]] bool validate_write_typed(T* value, size_t count = 1)
{

View file

@ -308,7 +308,7 @@ int Process::sys$getsockname(const Syscall::SC_getsockname_params* user_params)
return get_sock_or_peer_name<true>(params);
}
int Process::sys$getpeername(const Syscall::SC_getpeername_params* user_params)
int Process::sys$getpeername(Userspace<const Syscall::SC_getpeername_params*> user_params)
{
Syscall::SC_getpeername_params params;
if (!validate_read_and_copy_typed(&params, user_params))