Skip to content

Commit dc75ea9

Browse files
bgianfoawesomekling
authored andcommitted
Kernel: Use Userspace<T> for the getpeername syscall
1 parent 0db669a commit dc75ea9

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

Kernel/API/Syscall.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,8 @@ struct SC_getsockname_params {
326326

327327
struct SC_getpeername_params {
328328
int sockfd;
329-
sockaddr* addr;
330-
socklen_t* addrlen;
329+
Userspace<sockaddr*> addr;
330+
Userspace<socklen_t*> addrlen;
331331
};
332332

333333
struct SC_futex_params {

Kernel/Process.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ class Process
298298
int sys$getsockopt(const Syscall::SC_getsockopt_params*);
299299
int sys$setsockopt(const Syscall::SC_setsockopt_params*);
300300
int sys$getsockname(const Syscall::SC_getsockname_params*);
301-
int sys$getpeername(const Syscall::SC_getpeername_params*);
301+
int sys$getpeername(Userspace<const Syscall::SC_getpeername_params*>);
302302
int sys$sched_setparam(pid_t pid, Userspace<const struct sched_param*>);
303303
int sys$sched_getparam(pid_t pid, Userspace<struct sched_param*>);
304304
int sys$create_thread(void* (*)(void*), Userspace<const Syscall::SC_create_thread_params*>);
@@ -422,6 +422,13 @@ class Process
422422
return validated;
423423
}
424424

425+
template<typename T>
426+
[[nodiscard]] bool validate_read_and_copy_typed(T* dest, Userspace<T*> src)
427+
{
428+
Userspace<const T*> const_src { src.ptr() };
429+
return validate_read_and_copy_typed(dest, const_src);
430+
}
431+
425432
template<typename T>
426433
[[nodiscard]] bool validate_write_typed(T* value, size_t count = 1)
427434
{

Kernel/Syscalls/socket.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ int Process::sys$getsockname(const Syscall::SC_getsockname_params* user_params)
308308
return get_sock_or_peer_name<true>(params);
309309
}
310310

311-
int Process::sys$getpeername(const Syscall::SC_getpeername_params* user_params)
311+
int Process::sys$getpeername(Userspace<const Syscall::SC_getpeername_params*> user_params)
312312
{
313313
Syscall::SC_getpeername_params params;
314314
if (!validate_read_and_copy_typed(&params, user_params))

0 commit comments

Comments
 (0)