1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-16 20:15:07 +00:00

Kernel: Pass name+length to set_mmap_name() and remove SmapDisabler

This commit is contained in:
Andreas Kling 2020-01-06 11:56:59 +01:00
parent 6af8392cf8
commit 33025a8049
4 changed files with 27 additions and 8 deletions

View file

@ -208,17 +208,24 @@ Region* Process::region_containing(const Range& range)
return nullptr; return nullptr;
} }
int Process::sys$set_mmap_name(void* addr, size_t size, const char* name) int Process::sys$set_mmap_name(const Syscall::SC_set_mmap_name_params* user_params)
{ {
SmapDisabler disabler; if (!validate_read_typed(user_params))
if (!validate_read_str(name))
return -EFAULT; return -EFAULT;
auto* region = region_from_range({ VirtualAddress((u32)addr), size });
Syscall::SC_set_mmap_name_params params;
copy_from_user(&params, user_params, sizeof(params));
if (!validate_read(params.name, params.name_length))
return -EFAULT;
auto name = copy_string_from_user(params.name, params.name_length);
auto* region = region_from_range({ VirtualAddress((u32)params.addr), params.size });
if (!region) if (!region)
return -EINVAL; return -EINVAL;
if (!region->is_mmap()) if (!region->is_mmap())
return -EPERM; return -EPERM;
region->set_name(String(name)); region->set_name(name);
return 0; return 0;
} }

View file

@ -136,7 +136,7 @@ public:
pid_t sys$waitpid(pid_t, int* wstatus, int options); pid_t sys$waitpid(pid_t, int* wstatus, int options);
void* sys$mmap(const Syscall::SC_mmap_params*); void* sys$mmap(const Syscall::SC_mmap_params*);
int sys$munmap(void*, size_t size); int sys$munmap(void*, size_t size);
int sys$set_mmap_name(void*, size_t, const char*); int sys$set_mmap_name(const Syscall::SC_set_mmap_name_params*);
int sys$mprotect(void*, size_t, int prot); int sys$mprotect(void*, size_t, int prot);
int sys$madvise(void*, size_t, int advice); int sys$madvise(void*, size_t, int advice);
int sys$purge(int mode); int sys$purge(int mode);

View file

@ -298,6 +298,13 @@ struct SC_realpath_params {
size_t buffer_size; size_t buffer_size;
}; };
struct SC_set_mmap_name_params {
void* addr;
size_t size;
const char* name;
size_t name_length;
};
void initialize(); void initialize();
int sync(); int sync();

View file

@ -2,6 +2,7 @@
#include <errno.h> #include <errno.h>
#include <mman.h> #include <mman.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
extern "C" { extern "C" {
@ -41,7 +42,12 @@ int mprotect(void* addr, size_t size, int prot)
int set_mmap_name(void* addr, size_t size, const char* name) int set_mmap_name(void* addr, size_t size, const char* name)
{ {
int rc = syscall(SC_set_mmap_name, addr, size, name); if (!name) {
errno = EFAULT;
return -1;
}
Syscall::SC_set_mmap_name_params params { addr, size, name, strlen(name) };
int rc = syscall(SC_set_mmap_name, &params);
__RETURN_WITH_ERRNO(rc, rc, -1); __RETURN_WITH_ERRNO(rc, rc, -1);
} }
@ -50,5 +56,4 @@ int madvise(void* address, size_t size, int advice)
int rc = syscall(SC_madvise, address, size, advice); int rc = syscall(SC_madvise, address, size, advice);
__RETURN_WITH_ERRNO(rc, rc, -1); __RETURN_WITH_ERRNO(rc, rc, -1);
} }
} }