Kernel: Use u64 instead of size_t for File::can_read offset

This ensures offsets will not be truncated on large files on i686.
This commit is contained in:
Idan Horowitz 2022-01-25 20:17:49 +02:00
parent 0c630d5687
commit 9ce537d703
Notes: sideshowbarker 2024-07-17 20:14:26 +09:00
47 changed files with 47 additions and 47 deletions

View file

@ -85,7 +85,7 @@ void ConsolePort::handle_queue_update(Badge<VirtIO::Console>, u16 queue_index)
}
}
bool ConsolePort::can_read(const OpenFileDescription&, size_t) const
bool ConsolePort::can_read(const OpenFileDescription&, u64) const
{
return m_receive_buffer->used_bytes() > 0;
}

View file

@ -37,7 +37,7 @@ private:
virtual StringView class_name() const override { return "VirtIOConsolePort"sv; }
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;

View file

@ -31,7 +31,7 @@ public:
virtual StringView purpose() const override { return class_name(); }
// ^CharacterDevice
virtual bool can_read(const OpenFileDescription&, size_t) const override { return false; }
virtual bool can_read(const OpenFileDescription&, u64) const override { return false; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned, Userspace<void*>) override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;

View file

@ -184,7 +184,7 @@ void SB16::set_irq_line(u8 irq_number)
change_irq_number(irq_number);
}
bool SB16::can_read(OpenFileDescription const&, size_t) const
bool SB16::can_read(OpenFileDescription const&, u64) const
{
return false;
}

View file

@ -26,7 +26,7 @@ public:
static RefPtr<SB16> try_detect_and_create();
// ^CharacterDevice
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }

View file

@ -32,7 +32,7 @@ UNMAP_AFTER_INIT ConsoleDevice::~ConsoleDevice()
{
}
bool ConsoleDevice::can_read(const Kernel::OpenFileDescription&, size_t) const
bool ConsoleDevice::can_read(const Kernel::OpenFileDescription&, u64) const
{
return false;
}

View file

@ -21,7 +21,7 @@ public:
virtual ~ConsoleDevice() override;
// ^CharacterDevice
virtual bool can_read(const Kernel::OpenFileDescription&, size_t) const override;
virtual bool can_read(const Kernel::OpenFileDescription&, u64) const override;
virtual bool can_write(const Kernel::OpenFileDescription&, size_t) const override { return true; }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, Kernel::UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const Kernel::UserOrKernelBuffer&, size_t) override;

View file

@ -17,7 +17,7 @@ UNMAP_AFTER_INIT NonnullRefPtr<DeviceControlDevice> DeviceControlDevice::must_cr
return device_control_device_or_error.release_value();
}
bool DeviceControlDevice::can_read(const OpenFileDescription&, size_t) const
bool DeviceControlDevice::can_read(const OpenFileDescription&, u64) const
{
return true;
}

View file

@ -24,7 +24,7 @@ private:
virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return Error::from_errno(ENOTSUP); }
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override { return false; }
virtual StringView class_name() const override { return "DeviceControlDevice"sv; }
};

View file

@ -29,7 +29,7 @@ UNMAP_AFTER_INIT FullDevice::~FullDevice()
{
}
bool FullDevice::can_read(const OpenFileDescription&, size_t) const
bool FullDevice::can_read(const OpenFileDescription&, u64) const
{
return true;
}

View file

@ -23,7 +23,7 @@ private:
// ^CharacterDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
virtual StringView class_name() const override { return "FullDevice"sv; }
};

View file

@ -280,7 +280,7 @@ UNMAP_AFTER_INIT KeyboardDevice::~KeyboardDevice()
{
}
bool KeyboardDevice::can_read(const OpenFileDescription&, size_t) const
bool KeyboardDevice::can_read(const OpenFileDescription&, u64) const
{
return !m_queue.is_empty();
}

View file

@ -26,7 +26,7 @@ public:
// ^CharacterDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return EINVAL; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }

View file

@ -18,7 +18,7 @@ MouseDevice::~MouseDevice()
{
}
bool MouseDevice::can_read(const OpenFileDescription&, size_t) const
bool MouseDevice::can_read(const OpenFileDescription&, u64) const
{
SpinlockLocker lock(m_queue_lock);
return !m_queue.is_empty();

View file

@ -24,7 +24,7 @@ public:
// ^CharacterDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return EINVAL; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }

View file

@ -30,7 +30,7 @@ protected:
virtual StringView class_name() const override { return "KCOVDevice"sv; }
virtual bool can_read(const OpenFileDescription&, size_t) const override final { return true; }
virtual bool can_read(const OpenFileDescription&, u64) const override final { return true; }
virtual bool can_write(const OpenFileDescription&, size_t) const override final { return true; }
virtual void start_request(AsyncBlockDeviceRequest& request) override final { request.complete(AsyncDeviceRequest::Failure); }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override { return EINVAL; }

View file

@ -25,7 +25,7 @@ private:
MemoryDevice();
virtual StringView class_name() const override { return "MemoryDevice"sv; }
virtual bool can_read(const OpenFileDescription&, size_t) const override { return true; }
virtual bool can_read(const OpenFileDescription&, u64) const override { return true; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return false; }
virtual bool is_seekable() const override { return true; }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;

View file

@ -28,7 +28,7 @@ UNMAP_AFTER_INIT NullDevice::~NullDevice()
{
}
bool NullDevice::can_read(const OpenFileDescription&, size_t) const
bool NullDevice::can_read(const OpenFileDescription&, u64) const
{
return true;
}

View file

@ -24,7 +24,7 @@ private:
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual StringView class_name() const override { return "NullDevice"sv; }
virtual bool is_seekable() const override { return true; }
};

View file

@ -28,7 +28,7 @@ UNMAP_AFTER_INIT RandomDevice::~RandomDevice()
{
}
bool RandomDevice::can_read(const OpenFileDescription&, size_t) const
bool RandomDevice::can_read(const OpenFileDescription&, u64) const
{
return true;
}

View file

@ -23,7 +23,7 @@ private:
// ^CharacterDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
virtual StringView class_name() const override { return "RandomDevice"sv; }
};

View file

@ -56,7 +56,7 @@ UNMAP_AFTER_INIT SerialDevice::~SerialDevice()
{
}
bool SerialDevice::can_read(const OpenFileDescription&, size_t) const
bool SerialDevice::can_read(const OpenFileDescription&, u64) const
{
return (get_line_status() & DataReady) != 0;
}

View file

@ -20,7 +20,7 @@ public:
virtual ~SerialDevice() override;
// ^CharacterDevice
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;

View file

@ -28,7 +28,7 @@ UNMAP_AFTER_INIT ZeroDevice::~ZeroDevice()
{
}
bool ZeroDevice::can_read(const OpenFileDescription&, size_t) const
bool ZeroDevice::can_read(const OpenFileDescription&, u64) const
{
return true;
}

View file

@ -23,7 +23,7 @@ private:
// ^CharacterDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
virtual StringView class_name() const override { return "ZeroDevice"sv; }
};

View file

@ -25,7 +25,7 @@ public:
private:
virtual StringView class_name() const override { return "AnonymousFile"sv; }
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(const OpenFileDescription&) const override;
virtual bool can_read(const OpenFileDescription&, size_t) const override { return false; }
virtual bool can_read(const OpenFileDescription&, u64) const override { return false; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return false; }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override { return ENOTSUP; }
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return ENOTSUP; }

View file

@ -99,7 +99,7 @@ void FIFO::detach(Direction direction)
evaluate_block_conditions();
}
bool FIFO::can_read(const OpenFileDescription&, size_t) const
bool FIFO::can_read(const OpenFileDescription&, u64) const
{
return !m_buffer->is_empty() || !m_writers;
}

View file

@ -43,7 +43,7 @@ private:
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<struct stat> stat() const override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(const OpenFileDescription&) const override;
virtual StringView class_name() const override { return "FIFO"sv; }

View file

@ -81,7 +81,7 @@ public:
virtual ErrorOr<NonnullRefPtr<OpenFileDescription>> open(int options);
virtual ErrorOr<void> close();
virtual bool can_read(const OpenFileDescription&, size_t) const = 0;
virtual bool can_read(const OpenFileDescription&, u64) const = 0;
virtual bool can_write(const OpenFileDescription&, size_t) const = 0;
virtual ErrorOr<void> attach(OpenFileDescription&);

View file

@ -27,7 +27,7 @@ public:
const Inode& inode() const { return *m_inode; }
Inode& inode() { return *m_inode; }
virtual bool can_read(const OpenFileDescription&, size_t) const override { return true; }
virtual bool can_read(const OpenFileDescription&, u64) const override { return true; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;

View file

@ -22,7 +22,7 @@ InodeWatcher::~InodeWatcher()
(void)close();
}
bool InodeWatcher::can_read(const OpenFileDescription&, size_t) const
bool InodeWatcher::can_read(const OpenFileDescription&, u64) const
{
MutexLocker locker(m_lock);
return !m_queue.is_empty();

View file

@ -44,7 +44,7 @@ public:
static ErrorOr<NonnullRefPtr<InodeWatcher>> try_create();
virtual ~InodeWatcher() override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
// Can't write to an inode watcher.
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }

View file

@ -33,7 +33,7 @@ public:
private:
// ^File
virtual bool can_read(const OpenFileDescription&, size_t) const override final { return true; }
virtual bool can_read(const OpenFileDescription&, u64) const override final { return true; }
virtual bool can_write(const OpenFileDescription&, size_t) const override final { return true; }
virtual void start_request(AsyncBlockDeviceRequest& request) override final { request.complete(AsyncDeviceRequest::Failure); }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override { return EINVAL; }

View file

@ -161,7 +161,7 @@ ErrorOr<void> IPv4Socket::connect(OpenFileDescription& description, Userspace<co
return protocol_connect(description, should_block);
}
bool IPv4Socket::can_read(const OpenFileDescription&, size_t) const
bool IPv4Socket::can_read(const OpenFileDescription&, u64) const
{
if (m_role == Role::Listener)
return can_accept();

View file

@ -37,7 +37,7 @@ public:
virtual ErrorOr<void> listen(size_t) override;
virtual void get_local_address(sockaddr*, socklen_t*) override;
virtual void get_peer_address(sockaddr*, socklen_t*) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int, Userspace<const sockaddr*>, socklen_t) override;
virtual ErrorOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override;

View file

@ -258,7 +258,7 @@ void LocalSocket::detach(OpenFileDescription& description)
evaluate_block_conditions();
}
bool LocalSocket::can_read(const OpenFileDescription& description, size_t) const
bool LocalSocket::can_read(const OpenFileDescription& description, u64) const
{
auto role = this->role(description);
if (role == Role::Listener)

View file

@ -42,7 +42,7 @@ public:
virtual void get_peer_address(sockaddr*, socklen_t*) override;
virtual ErrorOr<void> attach(OpenFileDescription&) override;
virtual void detach(OpenFileDescription&) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int, Userspace<const sockaddr*>, socklen_t) override;
virtual ErrorOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override;

View file

@ -54,7 +54,7 @@ ErrorOr<size_t> DiskPartition::read(OpenFileDescription& fd, u64 offset, UserOrK
return m_device.strong_ref()->read(fd, offset + adjust, outbuf, len);
}
bool DiskPartition::can_read(const OpenFileDescription& fd, size_t offset) const
bool DiskPartition::can_read(const OpenFileDescription& fd, u64 offset) const
{
unsigned adjust = m_metadata.start_block() * block_size();
dbgln_if(OFFD_DEBUG, "DiskPartition::can_read offset={}, adjust={}", offset, adjust);

View file

@ -24,7 +24,7 @@ public:
// ^BlockDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;

View file

@ -38,7 +38,7 @@ public:
// ^BlockDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual void prepare_for_unplug() { m_partitions.clear(); }

View file

@ -72,7 +72,7 @@ ErrorOr<size_t> MasterPTY::write(OpenFileDescription&, u64, const UserOrKernelBu
return size;
}
bool MasterPTY::can_read(const OpenFileDescription&, size_t) const
bool MasterPTY::can_read(const OpenFileDescription&, u64) const
{
if (!m_slave)
return true;

View file

@ -33,7 +33,7 @@ private:
// ^CharacterDevice
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<void> close() override;
virtual bool is_master_pty() const override { return true; }

View file

@ -26,7 +26,7 @@ public:
virtual ErrorOr<NonnullRefPtr<OpenFileDescription>> open(int options) override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override { return 0; }
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override { return 0; }
virtual bool can_read(const OpenFileDescription&, size_t) const override { return true; }
virtual bool can_read(const OpenFileDescription&, u64) const override { return true; }
virtual bool can_write(const OpenFileDescription&, size_t) const override { return true; }
void notify_master_destroyed(Badge<MasterPTY>, unsigned index);

View file

@ -90,7 +90,7 @@ bool SlavePTY::can_write(const OpenFileDescription&, size_t) const
return m_master->can_write_from_slave();
}
bool SlavePTY::can_read(const OpenFileDescription& description, size_t offset) const
bool SlavePTY::can_read(const OpenFileDescription& description, u64 offset) const
{
if (m_master->is_closed())
return true;

View file

@ -32,7 +32,7 @@ private:
virtual void echo(u8) override;
// ^CharacterDevice
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual StringView class_name() const override { return "SlavePTY"sv; }

View file

@ -139,7 +139,7 @@ void TTY::process_output(u8 ch, Functor put_char)
}
}
bool TTY::can_read(const OpenFileDescription&, size_t) const
bool TTY::can_read(const OpenFileDescription&, u64) const
{
if (in_canonical_mode()) {
return m_available_lines > 0;

View file

@ -23,7 +23,7 @@ public:
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override;
virtual bool can_read(const OpenFileDescription&, size_t) const override;
virtual bool can_read(const OpenFileDescription&, u64) const override;
virtual bool can_write(const OpenFileDescription&, size_t) const override;
virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override final;
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(const OpenFileDescription&) const override;