From c2c9fa5c6bb4ae5a7cbb5fb51b42ca5ce4d4d832 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sat, 23 Jul 2016 22:24:21 +0100 Subject: [PATCH] ioctl: move the write check into the drivers --- Kernel/dev/blkdev.c | 5 +++++ Kernel/syscall_fs.c | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Kernel/dev/blkdev.c b/Kernel/dev/blkdev.c index 8791ecf0..c50fb73c 100644 --- a/Kernel/dev/blkdev.c +++ b/Kernel/dev/blkdev.c @@ -157,6 +157,11 @@ int blkdev_ioctl(uint8_t minor, uint16_t request, char *data) if (request != BLKFLSBUF) return -1; + if (!(getperm(ino) & OTH_WR)) { + udata.u_error = EPERM; + return -1; + } + /* we trust that blkdev_open() has already verified that this minor number is valid */ blk_op.blkdev = &blkdev_table[minor >> 4]; diff --git a/Kernel/syscall_fs.c b/Kernel/syscall_fs.c index 43d13348..1b29c081 100644 --- a/Kernel/syscall_fs.c +++ b/Kernel/syscall_fs.c @@ -263,10 +263,6 @@ arg_t _ioctl(void) if ((request & IOCTL_SUPER) && esuper()) return -1; - if (!(getperm(ino) & OTH_WR)) { - udata.u_error = EPERM; - return -1; - } dev = ino->c_node.i_addr[0]; -- 2.34.1