kernel/fs: Invoke the new is_user_address_range on more I/O buffers.

We do not access these buffers directly here but pass them deeper
into the kernel, where they may be used in IO operations that do
not invoke user_* functions at all, so we have to validate them fully here.

Part of #14961.
This commit is contained in:
Augustin Cavalier
2022-06-03 16:15:47 -04:00
parent 77694f9225
commit e52da6c73b
2 changed files with 5 additions and 5 deletions
+1 -1
View File
@@ -759,7 +759,7 @@ common_user_io(int fd, off_t pos, void* buffer, size_t length, bool write)
if (length == 0)
return 0;
if (!IS_USER_ADDRESS(buffer))
if (!is_user_address_range(buffer, length))
return B_BAD_ADDRESS;
SyscallRestartWrapper<status_t> status;
+4 -4
View File
@@ -918,7 +918,7 @@ _user_accept(int socket, struct sockaddr *userAddress,
ssize_t
_user_recv(int socket, void *data, size_t length, int flags)
{
if (data == NULL || !IS_USER_ADDRESS(data))
if (data == NULL || !is_user_address_range(data, length))
return B_BAD_ADDRESS;
SyscallRestartWrapper<ssize_t> result;
@@ -930,7 +930,7 @@ ssize_t
_user_recvfrom(int socket, void *data, size_t length, int flags,
struct sockaddr *userAddress, socklen_t *_addressLength)
{
if (data == NULL || !IS_USER_ADDRESS(data))
if (data == NULL || !is_user_address_range(data, length))
return B_BAD_ADDRESS;
// check parameters
@@ -1021,7 +1021,7 @@ _user_recvmsg(int socket, struct msghdr *userMessage, int flags)
ssize_t
_user_send(int socket, const void *data, size_t length, int flags)
{
if (data == NULL || !IS_USER_ADDRESS(data))
if (data == NULL || !is_user_address_range(data, length))
return B_BAD_ADDRESS;
SyscallRestartWrapper<ssize_t> result;
@@ -1033,7 +1033,7 @@ ssize_t
_user_sendto(int socket, const void *data, size_t length, int flags,
const struct sockaddr *userAddress, socklen_t addressLength)
{
if (data == NULL || !IS_USER_ADDRESS(data))
if (data == NULL || !is_user_address_range(data, length))
return B_BAD_ADDRESS;
if (addressLength <= 0