Details
-
Bug
-
Resolution: Fixed
-
Critical
-
Lustre 2.8.0
-
3
-
9223372036854775807
Description
In mdt_reint_rename_internal() if the mnew object is remote then it gets leaked. The last goto label below should be out_put_new:
if (!fid_is_md_operative(new_fid)) GOTO(out_put_old, rc = -EPERM); mnew = mdt_object_find(info->mti_env, info->mti_mdt, new_fid); if (IS_ERR(mnew)) GOTO(out_put_old, rc = PTR_ERR(mnew)); if (mdt_object_remote(mnew)) { struct mdt_body *repbody; /* Always send rename req to the target child MDT */ repbody = req_capsule_server_get(info->mti_pill, &RMF_MDT_BODY); LASSERT(repbody != NULL); repbody->mbo_fid1 = *new_fid; repbody->mbo_valid |= (OBD_MD_FLID | OBD_MD_MDS); GOTO(out_put_old, rc = -EXDEV); }
This leak is reachable.