vfs: access check on vfs_lookup

This commit is contained in:
Matheus
2024-08-24 20:21:42 -03:00
parent 4d51507953
commit 357f5c65cf
3 changed files with 8 additions and 1 deletions
+4
View File
@@ -523,6 +523,10 @@ int vfs_lookup(vnode_t **result, vnode_t *start, char *path, char *lastcomp, int
}
}
error = VOP_ACCESS(current, V_ACCESS_SEARCH, getcred());
if (error)
break;
error = VOP_LOOKUP(current, component, &next, getcred());
if (error)
break;
+1
View File
@@ -38,6 +38,7 @@
#define V_ATTR_MODE_SGID 02000
#define V_ATTR_MODE_SUID 04000
#define V_ACCESS_SEARCH 1
#define V_ACCESS_EXECUTE 1
#define V_ACCESS_WRITE 2
#define V_ACCESS_READ 4
+3 -1
View File
@@ -46,7 +46,9 @@ static int filesystem(cred_t *cred, int actions, void *arg0, void *arg1, void *a
}
if (actions & AUTH_ACTIONS_FILESYSTEM_EXECUTE) {
if ((attr.mode & (V_ATTR_MODE_USER_EXECUTE | V_ATTR_MODE_GROUP_EXECUTE | V_ATTR_MODE_OTHERS_EXECUTE)) && CRED_IS_ESU(cred))
if (vnode->type == V_TYPE_DIR && CRED_IS_ESU(cred))
weight += 1;
else if ((attr.mode & (V_ATTR_MODE_USER_EXECUTE | V_ATTR_MODE_GROUP_EXECUTE | V_ATTR_MODE_OTHERS_EXECUTE)) && CRED_IS_ESU(cred))
weight += 1;
else if (attr.uid == cred->euid && (attr.mode & V_ATTR_MODE_USER_EXECUTE))
weight += 1;