From: Christopher Hoffman Date: Wed, 24 Apr 2024 17:38:44 +0000 (+0000) Subject: client: During lookup of fscrypt symlink, use target fscrypt info. X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=b7cfae52920e35221fa1f82f6fe5d85c5db38021;p=ceph-ci.git client: During lookup of fscrypt symlink, use target fscrypt info. During a lookup of fscrypt enabled symlink, use target fscrypt info. This must be used because enc key for each file is derived from master_key+nonce. Fixes: https://tracker.ceph.com/issues/65615 Signed-off-by: Christopher Hoffman --- diff --git a/src/client/Client.cc b/src/client/Client.cc index b30e9138776..195489b19a4 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -7613,15 +7613,16 @@ int Client::_do_lookup(const InodeRef& dir, const string& name, int mask, r = make_request(req, perms, target); ldout(cct, 10) << __func__ << " res is " << r << dendl; - if (r == 0 && (*target)->is_symlink()) { - auto fscrypt_denc = fscrypt->get_fname_denc(dir->fscrypt_ctx, &dir->fscrypt_key_validator, true); + auto inode = *target; + if (r == 0 && inode->is_symlink()) { + auto fscrypt_denc = fscrypt->get_fname_denc(inode->fscrypt_ctx, &inode->fscrypt_key_validator, true); if (fscrypt_denc) { string slname; - int ret = fscrypt_denc->get_decrypted_symlink((*target)->symlink, &slname); + int ret = fscrypt_denc->get_decrypted_symlink(inode->symlink, &slname); if (ret < 0) { ldout(cct, 0) << __FILE__ << ":" << __LINE__ << ": failed to decrypt symlink (r=" << ret << ")" << dendl; } - (*target)->symlink_plain = slname; + inode->symlink_plain = slname; } }