1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:58:12 +00:00

Kernel: Make Socket::bind() take credentials as input

This commit is contained in:
Andreas Kling 2022-08-21 16:33:09 +02:00
parent 8d0bd3f225
commit 51318d51a4
6 changed files with 9 additions and 9 deletions

View file

@ -94,7 +94,7 @@ void IPv4Socket::get_peer_address(sockaddr* address, socklen_t* address_size)
*address_size = sizeof(sockaddr_in);
}
ErrorOr<void> IPv4Socket::bind(Userspace<sockaddr const*> user_address, socklen_t address_size)
ErrorOr<void> IPv4Socket::bind(Credentials const& credentials, Userspace<sockaddr const*> user_address, socklen_t address_size)
{
VERIFY(setup_state() == SetupState::Unstarted);
if (address_size != sizeof(sockaddr_in))
@ -107,9 +107,9 @@ ErrorOr<void> IPv4Socket::bind(Userspace<sockaddr const*> user_address, socklen_
return set_so_error(EINVAL);
auto requested_local_port = ntohs(address.sin_port);
if (!Process::current().is_superuser()) {
if (!credentials.is_superuser()) {
if (requested_local_port > 0 && requested_local_port < 1024) {
dbgln("UID {} attempted to bind {} to port {}", Process::current().uid(), class_name(), requested_local_port);
dbgln("UID {} attempted to bind {} to port {}", credentials.uid(), class_name(), requested_local_port);
return set_so_error(EACCES);
}
}