summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Rosenberg <drosen@google.com>2017-04-18 22:25:15 -0700
committerDaniel Rosenberg <drosen@google.com>2017-04-20 00:53:01 +0000
commit0f556ddb764a58ab6ab31b8930d651b7fe3f7bc4 (patch)
treebb6769a711a34b99335d29d443efa7875c7addec
parentd8cdb1c9f71197dd7b5268a8010d6939090113b7 (diff)
downloadx86_64-0f556ddb764a58ab6ab31b8930d651b7fe3f7bc4.tar.gz
Android: sdcardfs: Don't do d_add for lower fs
For file based encryption, ext4 explicitly does not create negative dentries for encrypted files. If you force one over it, the decrypted file will be hidden until the cache is cleared. Instead, just fail out. Signed-off-by: Daniel Rosenberg <drosen@google.com> Bug: 37231161 Change-Id: Id2a9708dfa75e1c22f89915c529789caadd2ca4b
-rwxr-xr-xfs/sdcardfs/lookup.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/sdcardfs/lookup.c b/fs/sdcardfs/lookup.c
index 3ac40fead490..666f9eb41e78 100755
--- a/fs/sdcardfs/lookup.c
+++ b/fs/sdcardfs/lookup.c
@@ -368,17 +368,15 @@ put_name:
dname.len = name->len;
dname.hash = full_name_hash(dname.name, dname.len);
lower_dentry = d_lookup(lower_dir_dentry, &dname);
- if (lower_dentry)
- goto setup_lower;
-
- lower_dentry = d_alloc(lower_dir_dentry, &dname);
if (!lower_dentry) {
- err = -ENOMEM;
+ /* We called vfs_path_lookup earlier, and did not get a negative
+ * dentry then. Don't confuse the lower filesystem by forcing one
+ * on it now...
+ */
+ err = -ENOENT;
goto out;
}
- d_add(lower_dentry, NULL); /* instantiate and hash */
-setup_lower:
lower_path.dentry = lower_dentry;
lower_path.mnt = mntget(lower_dir_mnt);
sdcardfs_set_lower_path(dentry, &lower_path);