Kernel: Make UserOrKernelBuffer::for_user_buffer() return ErrorOr<T>

This simplifies EFAULT propagation with TRY(). :^)
This commit is contained in:
Andreas Kling 2021-11-21 12:24:32 +01:00
parent b820ae2828
commit f2c3a41a8f
Notes: sideshowbarker 2024-07-18 00:53:53 +09:00
7 changed files with 27 additions and 47 deletions

View file

@ -26,18 +26,18 @@ public:
return UserOrKernelBuffer(kernel_buffer);
}
static Optional<UserOrKernelBuffer> for_user_buffer(u8* user_buffer, size_t size)
static ErrorOr<UserOrKernelBuffer> for_user_buffer(u8* user_buffer, size_t size)
{
if (user_buffer && !Memory::is_user_range(VirtualAddress(user_buffer), size))
return {};
return Error::from_errno(EFAULT);
return UserOrKernelBuffer(user_buffer);
}
template<typename UserspaceType>
static Optional<UserOrKernelBuffer> for_user_buffer(UserspaceType userspace, size_t size)
static ErrorOr<UserOrKernelBuffer> for_user_buffer(UserspaceType userspace, size_t size)
{
if (!Memory::is_user_range(VirtualAddress(userspace.unsafe_userspace_ptr()), size))
return {};
return Error::from_errno(EFAULT);
return UserOrKernelBuffer(const_cast<u8*>((const u8*)userspace.unsafe_userspace_ptr()));
}