|
@@ -285,6 +285,15 @@ static struct dentry *ubifs_lookup(struct inode *dir, struct dentry *dentry,
|
|
goto out_dent;
|
|
goto out_dent;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (ubifs_crypt_is_encrypted(dir) &&
|
|
|
|
+ (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
|
|
|
|
+ !fscrypt_has_permitted_context(dir, inode)) {
|
|
|
|
+ ubifs_warn(c, "Inconsistent encryption contexts: %lu/%lu",
|
|
|
|
+ dir->i_ino, inode->i_ino);
|
|
|
|
+ err = -EPERM;
|
|
|
|
+ goto out_inode;
|
|
|
|
+ }
|
|
|
|
+
|
|
done:
|
|
done:
|
|
kfree(dent);
|
|
kfree(dent);
|
|
fscrypt_free_filename(&nm);
|
|
fscrypt_free_filename(&nm);
|
|
@@ -295,6 +304,8 @@ done:
|
|
d_add(dentry, inode);
|
|
d_add(dentry, inode);
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
|
|
+out_inode:
|
|
|
|
+ iput(inode);
|
|
out_dent:
|
|
out_dent:
|
|
kfree(dent);
|
|
kfree(dent);
|
|
out_fname:
|
|
out_fname:
|