mirror of
https://github.com/SerenityOS/serenity
synced 2024-07-22 02:26:11 +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
|
@ -43,6 +43,7 @@ class String;
|
|||
class StringBuilder;
|
||||
class StringImpl;
|
||||
class StringView;
|
||||
class Time;
|
||||
class URL;
|
||||
class FlyString;
|
||||
class Utf32View;
|
||||
|
@ -175,6 +176,7 @@ using AK::String;
|
|||
using AK::StringBuilder;
|
||||
using AK::StringImpl;
|
||||
using AK::StringView;
|
||||
using AK::Time;
|
||||
using AK::Traits;
|
||||
using AK::URL;
|
||||
using AK::Utf32View;
|
||||
|
|
|
@ -102,6 +102,26 @@ template<typename 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>
|
||||
[[nodiscard]] inline bool copy_to_user(Userspace<T*> dest, const T* src)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue