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:
parent
0db669a9d2
commit
dc75ea9fc2
Notes:
sideshowbarker
2024-07-19 04:10:02 +09:00
Author: https://github.com/bgianfo
Commit: dc75ea9fc2
Pull-request: https://github.com/SerenityOS/serenity/pull/3039
3 changed files with 11 additions and 4 deletions
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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(¶ms, user_params))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue