git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
patch file systems with the acl checks
[lunaix-os.git]
/
lunaix-os
/
kernel
/
fs
/
vfs.c
diff --git
a/lunaix-os/kernel/fs/vfs.c
b/lunaix-os/kernel/fs/vfs.c
index 1696d6e961ace4b3ac092809db67cd9dddd42183..53faa560341f16b55ecb6964946d42b16880431b 100644
(file)
--- a/
lunaix-os/kernel/fs/vfs.c
+++ b/
lunaix-os/kernel/fs/vfs.c
@@
-192,12
+192,12
@@
vfs_dcache_rehash(struct v_dnode* new_parent, struct v_dnode* dnode)
int
vfs_open(struct v_dnode* dnode, struct v_file** file)
{
int
vfs_open(struct v_dnode* dnode, struct v_file** file)
{
- if (!dnode->inode || !dnode->inode->ops->open) {
+ struct v_inode* inode = dnode->inode;
+
+ if (!inode || !inode->ops->open) {
return ENOTSUP;
}
return ENOTSUP;
}
- struct v_inode* inode = dnode->inode;
-
lock_inode(inode);
struct v_file* vfile = cake_grab(file_pile);
lock_inode(inode);
struct v_file* vfile = cake_grab(file_pile);
@@
-846,6
+846,11
@@
__DEFINE_LXSYSCALL3(int, read, int, fd, void*, buf, size_t, count)
goto done;
}
goto done;
}
+ if (!check_allow_read(file->inode)) {
+ errno = EPERM;
+ goto done;
+ }
+
lock_inode(file->inode);
file->inode->atime = clock_unixtime();
lock_inode(file->inode);
file->inode->atime = clock_unixtime();
@@
-932,6
+937,11
@@
__DEFINE_LXSYSCALL3(int, lseek, int, fd, int, offset, int, options)
goto done;
}
goto done;
}
+ if (!check_allow_read(inode)) {
+ errno = EPERM;
+ goto done;
+ }
+
lock_inode(inode);
int overflow = 0;
lock_inode(inode);
int overflow = 0;
@@
-1012,6
+1022,10
@@
vfs_readlink(struct v_dnode* dnode, char* buf, size_t size)
return ENOTSUP;
}
return ENOTSUP;
}
+ if (!check_allow_read(inode)) {
+ return EPERM;
+ }
+
lock_inode(inode);
int errno = inode->ops->read_symlink(inode, &link);
lock_inode(inode);
int errno = inode->ops->read_symlink(inode, &link);