From: Jason Dillaman Date: Mon, 21 Mar 2016 13:32:08 +0000 (-0400) Subject: cls_rbd: throw error if set_features mask included non-mutable feature X-Git-Tag: v10.1.0~14^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=127c26f02ca529cb26e92d8148ab0091c1d718e8;p=ceph.git cls_rbd: throw error if set_features mask included non-mutable feature Signed-off-by: Jason Dillaman --- diff --git a/src/cls/rbd/cls_rbd.cc b/src/cls/rbd/cls_rbd.cc index 14d19f2db6d6..036ad8a6830f 100644 --- a/src/cls/rbd/cls_rbd.cc +++ b/src/cls/rbd/cls_rbd.cc @@ -402,15 +402,14 @@ int set_features(cls_method_context_t hctx, bufferlist *in, bufferlist *out) return r; } - uint64_t changed_features = (orig_features ^ features) & mask; - uint64_t enabled_features = changed_features & features; + uint64_t enabled_features = features & mask; if ((enabled_features & RBD_FEATURES_MUTABLE) != enabled_features) { CLS_ERR("Attempting to enable immutable feature: %" PRIu64, enabled_features & ~RBD_FEATURES_MUTABLE); return -EINVAL; } - uint64_t disabled_features = changed_features & orig_features; + uint64_t disabled_features = ~features & mask; uint64_t disable_mask = (RBD_FEATURES_MUTABLE | RBD_FEATURES_DISABLE_ONLY); if ((disabled_features & disable_mask) != disabled_features) { CLS_ERR("Attempting to disable immutable feature: %" PRIu64,