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-19 15:01:38 -0700
commite92f72194da2e690d85fc736661d3f0d96825c57 (patch)
tree8b4bc2e08242725dfaa8bb0cb29926a50ea19af0
parent6f28e6ebccbaeee26ee72669215cf1e4d0d79537 (diff)
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
-rw-r--r--fs/sdcardfs/lookup.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/sdcardfs/lookup.c b/fs/sdcardfs/lookup.c
index a0f221501b4c..08f62fb3e075 100644
--- 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);