Skip to content

Commit

Permalink
Kernel: Add a method to determine the desired permissions of a Device
Browse files Browse the repository at this point in the history
This method will be used later in DevFS, to set the appropriate
permissions for each device node.
  • Loading branch information
supercomputer7 authored and awesomekling committed Dec 27, 2020
1 parent 092a132 commit 18e77aa
Show file tree
Hide file tree
Showing 17 changed files with 50 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Kernel/Console.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ class Console final : public Kernel::CharacterDevice {

const CircularQueue<char, 16384>& logbuffer() const { return m_logbuffer; }

// ^Device
virtual mode_t required_mode() const override { return 0666; }

private:
CircularQueue<char, 16384> m_logbuffer;
};
3 changes: 3 additions & 0 deletions Kernel/Devices/BXVGADevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ class BXVGADevice final : public BlockDevice {
virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override;
virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t, int prot, bool shared) override;

// ^Device
virtual mode_t required_mode() const override { return 0660; }

private:
virtual const char* class_name() const override { return "BXVGA"; }
virtual bool can_read(const FileDescription&, size_t) const override { return true; }
Expand Down
2 changes: 2 additions & 0 deletions Kernel/Devices/Device.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ class Device : public File {
uid_t uid() const { return m_uid; }
uid_t gid() const { return m_gid; }

virtual mode_t required_mode() const = 0;

virtual bool is_device() const override { return true; }
virtual bool is_disk_device() const { return false; }

Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/DiskPartition.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ class DiskPartition final : public BlockDevice {
virtual KResultOr<size_t> write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const FileDescription&, size_t) const override;

// ^Device
virtual mode_t required_mode() const override { return 0600; }

private:
virtual const char* class_name() const override;

Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/FullDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ class FullDevice final : public CharacterDevice {
FullDevice();
virtual ~FullDevice() override;

// ^Device
virtual mode_t required_mode() const override { return 0600; }

private:
// ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/KeyboardDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ class KeyboardDevice final : public IRQHandler
enable_irq();
}

// ^Device
virtual mode_t required_mode() const override { return 0440; }

private:
// ^IRQHandler
virtual void handle_irq(const RegisterState&) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/MBVGADevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ class MBVGADevice final : public BlockDevice {
virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override;
virtual KResultOr<Region*> mmap(Process&, FileDescription&, VirtualAddress preferred_vaddr, size_t offset, size_t, int prot, bool shared) override;

// ^Device
virtual mode_t required_mode() const override { return 0660; }

private:
virtual const char* class_name() const override { return "MBVGA"; }
virtual bool can_read(const FileDescription&, size_t) const override { return true; }
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/NullDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ class NullDevice final : public CharacterDevice {
static void initialize();
static NullDevice& the();

// ^Device
virtual mode_t required_mode() const override { return 0666; }

private:
// ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/PS2MouseDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ class PS2MouseDevice final : public IRQHandler
enable_irq();
}

// ^Device
virtual mode_t required_mode() const override { return 0440; }

private:
// ^IRQHandler
void handle_vmmouse_absolute_pointer();
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/RandomDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ class RandomDevice final : public CharacterDevice {
RandomDevice();
virtual ~RandomDevice() override;

// ^Device
virtual mode_t required_mode() const override { return 0666; }

private:
// ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/SB16.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ class SB16 final : public IRQHandler

virtual const char* purpose() const override { return class_name(); }

// ^Device
virtual mode_t required_mode() const override { return 0220; }

private:
// ^IRQHandler
virtual void handle_irq(const RegisterState&) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/SerialDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@ class SerialDevice final : public CharacterDevice {
DataReady = 0x01 << 0
};

// ^Device
virtual mode_t required_mode() const override { return 0620; }

private:
// ^CharacterDevice
virtual const char* class_name() const override { return "SerialDevice"; }
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Devices/ZeroDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ class ZeroDevice final : public CharacterDevice {
ZeroDevice();
virtual ~ZeroDevice() override;

// ^Device
virtual mode_t required_mode() const override { return 0666; }

private:
// ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/Storage/StorageDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ class StorageDevice : public BlockDevice {
virtual KResultOr<size_t> write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const FileDescription&, size_t) const override;

// ^Device
virtual mode_t required_mode() const override { return 0600; }

protected:
StorageDevice(const StorageController&, int, int, size_t, size_t);
// ^DiskDevice
Expand Down
3 changes: 3 additions & 0 deletions Kernel/TTY/MasterPTY.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ class MasterPTY final : public CharacterDevice {

virtual String absolute_path(const FileDescription&) const override;

// ^Device
virtual mode_t required_mode() const override { return 0640; }

private:
// ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;
Expand Down
3 changes: 3 additions & 0 deletions Kernel/TTY/PTYMultiplexer.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class PTYMultiplexer final : public CharacterDevice {

void notify_master_destroyed(Badge<MasterPTY>, unsigned index);

// ^Device
virtual mode_t required_mode() const override { return 0666; }

private:
// ^CharacterDevice
virtual const char* class_name() const override { return "PTYMultiplexer"; }
Expand Down
3 changes: 3 additions & 0 deletions Kernel/TTY/TTY.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ class TTY : public CharacterDevice {
void set_default_termios();
void hang_up();

// ^Device
virtual mode_t required_mode() const override { return 0620; }

protected:
virtual ssize_t on_tty_write(const UserOrKernelBuffer&, ssize_t) = 0;
void set_size(unsigned short columns, unsigned short rows);
Expand Down

0 comments on commit 18e77aa

Please sign in to comment.