X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fmdd%2Fmdd_permission.c;h=0065a61d87e1c0574c7d9f1cac78a667387e0f95;hb=9189dbcd10bced3e2acb12b4393f5d3e849a9649;hp=505fb315193addb5f1cf9ef35507614b4776fcf7;hpb=4b67e5a8150309f4bbeb43a9095f12243be6dcfa;p=fs%2Flustre-release.git diff --git a/lustre/mdd/mdd_permission.c b/lustre/mdd/mdd_permission.c index 505fb31..0065a61 100644 --- a/lustre/mdd/mdd_permission.c +++ b/lustre/mdd/mdd_permission.c @@ -62,8 +62,15 @@ int mdd_acl_chmod(const struct lu_env *env, struct mdd_object *o, __u32 mode, ENTRY; lu_buf_check_and_alloc(&mdd_env_info(env)->mti_xattr_buf, - mdd_obj2mdd_dev(o)->mdd_dt_conf.ddp_max_ea_size); + MIN(mdd_obj2mdd_dev(o)->mdd_dt_conf.ddp_max_ea_size, + XATTR_SIZE_MAX)); buf = mdd_env_info(env)->mti_xattr_buf; + if (buf.lb_buf == NULL) + RETURN(-ENOMEM); + + if (buf.lb_len > XATTR_SIZE_MAX) + buf.lb_len = XATTR_SIZE_MAX; + rc = mdo_xattr_get(env, o, &buf, XATTR_NAME_ACL_ACCESS); if ((rc == -EOPNOTSUPP) || (rc == -ENODATA)) RETURN(0); @@ -210,8 +217,15 @@ static int mdd_check_acl(const struct lu_env *env, struct mdd_object *obj, ENTRY; lu_buf_check_and_alloc(&mdd_env_info(env)->mti_xattr_buf, - mdd_obj2mdd_dev(obj)->mdd_dt_conf.ddp_max_ea_size); + MIN(mdd_obj2mdd_dev(obj)->mdd_dt_conf.ddp_max_ea_size, + XATTR_SIZE_MAX)); buf = mdd_env_info(env)->mti_xattr_buf; + if (buf.lb_buf == NULL) + RETURN(-ENOMEM); + + if (buf.lb_len > XATTR_SIZE_MAX) + buf.lb_len = XATTR_SIZE_MAX; + rc = mdo_xattr_get(env, obj, &buf, XATTR_NAME_ACL_ACCESS); if (rc <= 0) RETURN(rc ? : -EACCES);