1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:17:35 +00:00

Kernel: Add a method to determine the desired permissions of a Device

This method will be used later in DevFS, to set the appropriate
permissions for each device node.
This commit is contained in:
Liav A 2020-12-25 19:01:19 +02:00 committed by Andreas Kling
parent 092a13211a
commit 18e77aa285
17 changed files with 50 additions and 0 deletions

View file

@ -51,6 +51,9 @@ public:
const CircularQueue<char, 16384>& logbuffer() const { return m_logbuffer; } const CircularQueue<char, 16384>& logbuffer() const { return m_logbuffer; }
// ^Device
virtual mode_t required_mode() const override { return 0666; }
private: private:
CircularQueue<char, 16384> m_logbuffer; CircularQueue<char, 16384> m_logbuffer;
}; };

View file

@ -44,6 +44,9 @@ public:
virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override; 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; 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: private:
virtual const char* class_name() const override { return "BXVGA"; } virtual const char* class_name() const override { return "BXVGA"; }
virtual bool can_read(const FileDescription&, size_t) const override { return true; } virtual bool can_read(const FileDescription&, size_t) const override { return true; }

View file

@ -57,6 +57,8 @@ public:
uid_t uid() const { return m_uid; } uid_t uid() const { return m_uid; }
uid_t gid() const { return m_gid; } 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_device() const override { return true; }
virtual bool is_disk_device() const { return false; } virtual bool is_disk_device() const { return false; }

View file

@ -44,6 +44,9 @@ public:
virtual KResultOr<size_t> write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const FileDescription&, size_t) const override; virtual bool can_write(const FileDescription&, size_t) const override;
// ^Device
virtual mode_t required_mode() const override { return 0600; }
private: private:
virtual const char* class_name() const override; virtual const char* class_name() const override;

View file

@ -36,6 +36,9 @@ public:
FullDevice(); FullDevice();
virtual ~FullDevice() override; virtual ~FullDevice() override;
// ^Device
virtual mode_t required_mode() const override { return 0600; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;

View file

@ -74,6 +74,9 @@ public:
enable_irq(); enable_irq();
} }
// ^Device
virtual mode_t required_mode() const override { return 0440; }
private: private:
// ^IRQHandler // ^IRQHandler
virtual void handle_irq(const RegisterState&) override; virtual void handle_irq(const RegisterState&) override;

View file

@ -43,6 +43,9 @@ public:
virtual int ioctl(FileDescription&, unsigned request, FlatPtr arg) override; 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; 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: private:
virtual const char* class_name() const override { return "MBVGA"; } virtual const char* class_name() const override { return "MBVGA"; }
virtual bool can_read(const FileDescription&, size_t) const override { return true; } virtual bool can_read(const FileDescription&, size_t) const override { return true; }

View file

@ -39,6 +39,9 @@ public:
static void initialize(); static void initialize();
static NullDevice& the(); static NullDevice& the();
// ^Device
virtual mode_t required_mode() const override { return 0666; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;

View file

@ -61,6 +61,9 @@ public:
enable_irq(); enable_irq();
} }
// ^Device
virtual mode_t required_mode() const override { return 0440; }
private: private:
// ^IRQHandler // ^IRQHandler
void handle_vmmouse_absolute_pointer(); void handle_vmmouse_absolute_pointer();

View file

@ -36,6 +36,9 @@ public:
RandomDevice(); RandomDevice();
virtual ~RandomDevice() override; virtual ~RandomDevice() override;
// ^Device
virtual mode_t required_mode() const override { return 0666; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;

View file

@ -53,6 +53,9 @@ public:
virtual const char* purpose() const override { return class_name(); } virtual const char* purpose() const override { return class_name(); }
// ^Device
virtual mode_t required_mode() const override { return 0220; }
private: private:
// ^IRQHandler // ^IRQHandler
virtual void handle_irq(const RegisterState&) override; virtual void handle_irq(const RegisterState&) override;

View file

@ -123,6 +123,9 @@ public:
DataReady = 0x01 << 0 DataReady = 0x01 << 0
}; };
// ^Device
virtual mode_t required_mode() const override { return 0620; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual const char* class_name() const override { return "SerialDevice"; } virtual const char* class_name() const override { return "SerialDevice"; }

View file

@ -36,6 +36,9 @@ public:
ZeroDevice(); ZeroDevice();
virtual ~ZeroDevice() override; virtual ~ZeroDevice() override;
// ^Device
virtual mode_t required_mode() const override { return 0666; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;

View file

@ -53,6 +53,9 @@ public:
virtual KResultOr<size_t> write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> write(FileDescription&, size_t, const UserOrKernelBuffer&, size_t) override;
virtual bool can_write(const FileDescription&, size_t) const override; virtual bool can_write(const FileDescription&, size_t) const override;
// ^Device
virtual mode_t required_mode() const override { return 0600; }
protected: protected:
StorageDevice(const StorageController&, int, int, size_t, size_t); StorageDevice(const StorageController&, int, int, size_t, size_t);
// ^DiskDevice // ^DiskDevice

View file

@ -48,6 +48,9 @@ public:
virtual String absolute_path(const FileDescription&) const override; virtual String absolute_path(const FileDescription&) const override;
// ^Device
virtual mode_t required_mode() const override { return 0640; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override; virtual KResultOr<size_t> read(FileDescription&, size_t, UserOrKernelBuffer&, size_t) override;

View file

@ -55,6 +55,9 @@ public:
void notify_master_destroyed(Badge<MasterPTY>, unsigned index); void notify_master_destroyed(Badge<MasterPTY>, unsigned index);
// ^Device
virtual mode_t required_mode() const override { return 0666; }
private: private:
// ^CharacterDevice // ^CharacterDevice
virtual const char* class_name() const override { return "PTYMultiplexer"; } virtual const char* class_name() const override { return "PTYMultiplexer"; }

View file

@ -67,6 +67,9 @@ public:
void set_default_termios(); void set_default_termios();
void hang_up(); void hang_up();
// ^Device
virtual mode_t required_mode() const override { return 0620; }
protected: protected:
virtual ssize_t on_tty_write(const UserOrKernelBuffer&, ssize_t) = 0; virtual ssize_t on_tty_write(const UserOrKernelBuffer&, ssize_t) = 0;
void set_size(unsigned short columns, unsigned short rows); void set_size(unsigned short columns, unsigned short rows);