diff options
author | Daniel Rosenberg <drosen@google.com> | 2017-04-18 22:25:15 -0700 |
---|---|---|
committer | Daniel Rosenberg <drosen@google.com> | 2017-04-20 00:53:01 +0000 |
commit | 0f556ddb764a58ab6ab31b8930d651b7fe3f7bc4 (patch) | |
tree | bb6769a711a34b99335d29d443efa7875c7addec | |
parent | d8cdb1c9f71197dd7b5268a8010d6939090113b7 (diff) | |
download | x86_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-x | fs/sdcardfs/lookup.c | 12 |
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); |