mirror of
https://github.com/RGBCube/serenity
synced 2025-06-13 12:52:06 +00:00
Kernel: Prevent using copy_from_user() for timespec/timeval
These structs can be inconsistent, for example if the amount of microseconds is negative or larger than 1'000'000. Therefore, they should not be copied as-is. Use copy_time_from_user instead.
This commit is contained in:
parent
8598240193
commit
e510c41fd2
2 changed files with 22 additions and 0 deletions
|
@ -43,6 +43,7 @@ class String;
|
||||||
class StringBuilder;
|
class StringBuilder;
|
||||||
class StringImpl;
|
class StringImpl;
|
||||||
class StringView;
|
class StringView;
|
||||||
|
class Time;
|
||||||
class URL;
|
class URL;
|
||||||
class FlyString;
|
class FlyString;
|
||||||
class Utf32View;
|
class Utf32View;
|
||||||
|
@ -175,6 +176,7 @@ using AK::String;
|
||||||
using AK::StringBuilder;
|
using AK::StringBuilder;
|
||||||
using AK::StringImpl;
|
using AK::StringImpl;
|
||||||
using AK::StringView;
|
using AK::StringView;
|
||||||
|
using AK::Time;
|
||||||
using AK::Traits;
|
using AK::Traits;
|
||||||
using AK::URL;
|
using AK::URL;
|
||||||
using AK::Utf32View;
|
using AK::Utf32View;
|
||||||
|
|
|
@ -102,6 +102,26 @@ template<typename T>
|
||||||
return copy_from_user(dest, src.unsafe_userspace_ptr(), sizeof(T));
|
return copy_from_user(dest, src.unsafe_userspace_ptr(), sizeof(T));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define DEPRECATE_COPY_FROM_USER_TYPE(T, REPLACEMENT) \
|
||||||
|
template<> \
|
||||||
|
[[nodiscard]] inline __attribute__((deprecated("use " #REPLACEMENT " instead"))) bool copy_from_user<T>(T*, const T*) \
|
||||||
|
{ \
|
||||||
|
VERIFY_NOT_REACHED(); \
|
||||||
|
} \
|
||||||
|
template<> \
|
||||||
|
[[nodiscard]] inline __attribute__((deprecated("use " #REPLACEMENT " instead"))) bool copy_from_user<T>(T*, Userspace<const T*>) \
|
||||||
|
{ \
|
||||||
|
VERIFY_NOT_REACHED(); \
|
||||||
|
} \
|
||||||
|
template<> \
|
||||||
|
[[nodiscard]] inline __attribute__((deprecated("use " #REPLACEMENT " instead"))) bool copy_from_user<T>(T*, Userspace<T*>) \
|
||||||
|
{ \
|
||||||
|
VERIFY_NOT_REACHED(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
DEPRECATE_COPY_FROM_USER_TYPE(timespec, copy_time_from_user)
|
||||||
|
DEPRECATE_COPY_FROM_USER_TYPE(timeval, copy_time_from_user)
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
[[nodiscard]] inline bool copy_to_user(Userspace<T*> dest, const T* src)
|
[[nodiscard]] inline bool copy_to_user(Userspace<T*> dest, const T* src)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue