mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 22:17:43 +00:00
Kernel: Use Userspace<T> in sys$utime()
And again, another helper overload.
This commit is contained in:
parent
62a4099581
commit
180207062c
2 changed files with 12 additions and 2 deletions
|
@ -268,7 +268,7 @@ public:
|
||||||
int sys$ioctl(int fd, unsigned request, FlatPtr arg);
|
int sys$ioctl(int fd, unsigned request, FlatPtr arg);
|
||||||
int sys$mkdir(const char* pathname, size_t path_length, mode_t mode);
|
int sys$mkdir(const char* pathname, size_t path_length, mode_t mode);
|
||||||
clock_t sys$times(tms*);
|
clock_t sys$times(tms*);
|
||||||
int sys$utime(const char* pathname, size_t path_length, const struct utimbuf*);
|
int sys$utime(Userspace<const char*> pathname, size_t path_length, Userspace<const struct utimbuf*>);
|
||||||
int sys$link(const Syscall::SC_link_params*);
|
int sys$link(const Syscall::SC_link_params*);
|
||||||
int sys$unlink(const char* pathname, size_t path_length);
|
int sys$unlink(const char* pathname, size_t path_length);
|
||||||
int sys$symlink(const Syscall::SC_symlink_params*);
|
int sys$symlink(const Syscall::SC_symlink_params*);
|
||||||
|
@ -379,6 +379,16 @@ public:
|
||||||
return validate_read(value, size.value());
|
return validate_read(value, size.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
[[nodiscard]] bool validate_read_typed(Userspace<T*> value, size_t count = 1)
|
||||||
|
{
|
||||||
|
Checked size = sizeof(T);
|
||||||
|
size *= count;
|
||||||
|
if (size.has_overflow())
|
||||||
|
return false;
|
||||||
|
return validate_read(value, size.value());
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
[[nodiscard]] bool validate_read_and_copy_typed(T* dest, const T* src)
|
[[nodiscard]] bool validate_read_and_copy_typed(T* dest, const T* src)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
int Process::sys$utime(const char* user_path, size_t path_length, const utimbuf* user_buf)
|
int Process::sys$utime(Userspace<const char*> user_path, size_t path_length, Userspace<const struct utimbuf*> user_buf)
|
||||||
{
|
{
|
||||||
REQUIRE_PROMISE(fattr);
|
REQUIRE_PROMISE(fattr);
|
||||||
if (user_buf && !validate_read_typed(user_buf))
|
if (user_buf && !validate_read_typed(user_buf))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue