Browse Source

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.
Liav A 4 years ago
parent
commit
18e77aa285

+ 3 - 0
Kernel/Console.h

@@ -51,6 +51,9 @@ public:
 
     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 - 0
Kernel/Devices/BXVGADevice.h

@@ -44,6 +44,9 @@ public:
     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; }

+ 2 - 0
Kernel/Devices/Device.h

@@ -57,6 +57,8 @@ public:
     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; }
 

+ 3 - 0
Kernel/Devices/DiskPartition.h

@@ -44,6 +44,9 @@ public:
     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;
 

+ 3 - 0
Kernel/Devices/FullDevice.h

@@ -36,6 +36,9 @@ public:
     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;

+ 3 - 0
Kernel/Devices/KeyboardDevice.h

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

+ 3 - 0
Kernel/Devices/MBVGADevice.h

@@ -43,6 +43,9 @@ public:
     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; }

+ 3 - 0
Kernel/Devices/NullDevice.h

@@ -39,6 +39,9 @@ public:
     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;

+ 3 - 0
Kernel/Devices/PS2MouseDevice.h

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

+ 3 - 0
Kernel/Devices/RandomDevice.h

@@ -36,6 +36,9 @@ public:
     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;

+ 3 - 0
Kernel/Devices/SB16.h

@@ -53,6 +53,9 @@ public:
 
     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;

+ 3 - 0
Kernel/Devices/SerialDevice.h

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

+ 3 - 0
Kernel/Devices/ZeroDevice.h

@@ -36,6 +36,9 @@ public:
     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;

+ 3 - 0
Kernel/Storage/StorageDevice.h

@@ -53,6 +53,9 @@ public:
     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

+ 3 - 0
Kernel/TTY/MasterPTY.h

@@ -48,6 +48,9 @@ public:
 
     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;

+ 3 - 0
Kernel/TTY/PTYMultiplexer.h

@@ -55,6 +55,9 @@ public:
 
     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"; }

+ 3 - 0
Kernel/TTY/TTY.h

@@ -67,6 +67,9 @@ public:
     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);