mirror of
https://github.com/RGBCube/serenity
synced 2025-05-18 21:25:07 +00:00
Kernel: Make copy_{from,to}_user() return KResult and use TRY()
This makes EFAULT propagation flow much more naturally. :^)
This commit is contained in:
parent
9903f5c6ef
commit
48a0b31c47
57 changed files with 318 additions and 551 deletions
|
@ -64,24 +64,17 @@ KResult InodeFile::ioctl(FileDescription& description, unsigned request, Userspa
|
|||
|
||||
auto user_block_number = static_ptr_cast<int*>(arg);
|
||||
int block_number = 0;
|
||||
if (!copy_from_user(&block_number, user_block_number))
|
||||
return EFAULT;
|
||||
TRY(copy_from_user(&block_number, user_block_number));
|
||||
|
||||
if (block_number < 0)
|
||||
return EINVAL;
|
||||
|
||||
auto block_address = TRY(inode().get_block_address(block_number));
|
||||
if (!copy_to_user(user_block_number, &block_address))
|
||||
return EFAULT;
|
||||
|
||||
return KSuccess;
|
||||
return copy_to_user(user_block_number, &block_address);
|
||||
}
|
||||
case FIONREAD: {
|
||||
int remaining_bytes = inode().size() - description.offset();
|
||||
if (!copy_to_user(Userspace<int*>(arg), &remaining_bytes))
|
||||
return EFAULT;
|
||||
|
||||
return KSuccess;
|
||||
return copy_to_user(Userspace<int*>(arg), &remaining_bytes);
|
||||
}
|
||||
default:
|
||||
return EINVAL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue