void mdt_dump_lmv(unsigned int level, const union lmv_mds_md *lmv)
{
const struct lmv_mds_md_v1 *lmm1;
+ const struct lmv_foreign_md *lfm;
int i;
if (likely(!cfs_cdebug_show(level, DEBUG_SUBSYSTEM)))
return;
+ /* foreign LMV case */
+ lfm = &lmv->lmv_foreign_md;
+ if (le32_to_cpu(lfm->lfm_magic) == LMV_MAGIC_FOREIGN) {
+ CDEBUG_LIMIT(level,
+ "foreign magic 0x%08X, length %u, type %u, flags %u, value '%.*s'\n",
+ le32_to_cpu(lfm->lfm_magic),
+ le32_to_cpu(lfm->lfm_length),
+ le32_to_cpu(lfm->lfm_type),
+ le32_to_cpu(lfm->lfm_flags),
+ le32_to_cpu(lfm->lfm_length), lfm->lfm_value);
+ return;
+ }
+
lmm1 = &lmv->lmv_md_v1;
CDEBUG(level,
"magic 0x%08X, master %#X stripe_count %#x hash_type %#x\n",
req_capsule_shrink(pill, &RMF_LOGCOOKIES, acl_size, RCL_SERVER);
}
+ /* Shrink optional SECCTX buffer if it is not used */
+ if (req_capsule_has_field(pill, &RMF_FILE_SECCTX, RCL_SERVER) &&
+ req_capsule_get_size(pill, &RMF_FILE_SECCTX, RCL_SERVER) != 0 &&
+ !(body->mbo_valid & OBD_MD_SECCTX))
+ req_capsule_shrink(pill, &RMF_FILE_SECCTX, 0, RCL_SERVER);
+
/*
* Some more field should be shrinked if needed.
* This should be done by those who added fields to reply message.
MDS_ATTR_FROM_OPEN | MDS_ATTR_LSIZE | MDS_ATTR_LBLOCKS |
MDS_ATTR_OVERRIDE);
if (in != 0)
- CERROR("Unknown attr bits: %#llx\n", in);
+ CDEBUG(D_INFO, "Unknown attr bits: %#llx\n", in);
return out;
}
rr->rr_eadata = req_capsule_client_get(pill, &RMF_EADATA);
rr->rr_eadatalen = req_capsule_get_size(pill, &RMF_EADATA,
RCL_CLIENT);
+
if (rr->rr_eadatalen > 0) {
const struct lmv_user_md *lum;
struct mdt_rec_create *rec;
struct lu_attr *attr = &info->mti_attr.ma_attr;
struct mdt_reint_record *rr = &info->mti_rr;
- struct req_capsule *pill = info->mti_pill;
- struct md_op_spec *sp = &info->mti_spec;
+ struct req_capsule *pill = info->mti_pill;
+ struct md_op_spec *sp = &info->mti_spec;
int rc;
ENTRY;
if (rc < 0)
RETURN(rc);
+ rc = req_check_sepol(pill);
+ if (rc)
+ RETURN(rc);
+
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
}
if (rc < 0)
RETURN(rc);
+ rc = req_check_sepol(pill);
+ if (rc)
+ RETURN(rc);
+
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
struct mdt_rec_unlink *rec;
struct lu_attr *attr = &info->mti_attr.ma_attr;
struct mdt_reint_record *rr = &info->mti_rr;
- struct req_capsule *pill = info->mti_pill;
+ struct req_capsule *pill = info->mti_pill;
int rc;
ENTRY;
info->mti_spec.no_create = !!req_is_replay(mdt_info_req(info));
+ rc = req_check_sepol(pill);
+ if (rc)
+ RETURN(rc);
+
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
}
spec->no_create = !!req_is_replay(mdt_info_req(info));
+ rc = req_check_sepol(pill);
+ if (rc)
+ RETURN(rc);
+
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
rr->rr_eadatalen = req_capsule_get_size(pill,
&RMF_EADATA,
RCL_CLIENT);
+
if (rr->rr_eadatalen > 0) {
rr->rr_eadata = req_capsule_client_get(pill,
&RMF_EADATA);
if (req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
rr->rr_eadatalen = req_capsule_get_size(pill, &RMF_EADATA,
RCL_CLIENT);
+
if (rr->rr_eadatalen > 0) {
rr->rr_eadata = req_capsule_client_get(pill,
&RMF_EADATA);
rc = mdt_file_secctx_unpack(pill, &sp->sp_cr_file_secctx_name,
&sp->sp_cr_file_secctx,
&sp->sp_cr_file_secctx_size);
+ if (rc < 0)
+ RETURN(rc);
+
+ rc = req_check_sepol(pill);
+ if (rc)
+ RETURN(rc);
RETURN(rc);
}
if (req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
rr->rr_eadatalen = req_capsule_get_size(pill, &RMF_EADATA,
RCL_CLIENT);
+
+ if (rr->rr_eadatalen > info->mti_mdt->mdt_max_ea_size)
+ RETURN(-E2BIG);
+
if (rr->rr_eadatalen > 0) {
rr->rr_eadata = req_capsule_client_get(pill,
&RMF_EADATA);
RETURN(-EFAULT);
}
+ rc = req_check_sepol(pill);
+ if (rc)
+ RETURN(rc);
+
if (mdt_dlmreq_unpack(info) < 0)
RETURN(-EPROTO);