diff options
author | Raghavendra Bhat <raghavendra@redhat.com> | 2015-05-26 19:22:14 +0530 |
---|---|---|
committer | Venky Shankar <vshankar@redhat.com> | 2015-06-27 04:17:33 -0700 |
commit | 15dcfe98caa573e87d898cb66c13ef7187730c6b (patch) | |
tree | 0b4e523a9d34f71020200fb543e90ee248bcf7cf /xlators/features/bit-rot/src/stub/bit-rot-common.h | |
parent | c2f577c1caea959caf6d3c4b00f7c68c34a26edb (diff) |
features/bit-rot-stub: deny access to bad objects
* Access to bad objects (especially operations such as open, readv, writev)
should be denied to prevent applications from getting wrong data.
* Do not allow anyone apart from scrubber to set bad object xattr.
* Do not allow bad object xattr to be removed.
Change-Id: Ia9185a067233a9f26e3d41d41d11d9a4eb0da827
BUG: 1210689
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Signed-off-by: Venky Shankar <vshankar@redhat.com>
Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-on: http://review.gluster.org/11126
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/features/bit-rot/src/stub/bit-rot-common.h')
-rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-common.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-common.h b/xlators/features/bit-rot/src/stub/bit-rot-common.h index 7ad5e8a80c6..bcf931a2b0b 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-common.h +++ b/xlators/features/bit-rot/src/stub/bit-rot-common.h @@ -36,12 +36,23 @@ typedef enum br_sign_state { } br_sign_state_t; static inline br_vxattr_status_t -br_version_xattr_state (dict_t *xattr, - br_version_t **obuf, br_signature_t **sbuf) +br_version_xattr_state (dict_t *xattr, br_version_t **obuf, + br_signature_t **sbuf, gf_boolean_t *objbad) { int32_t ret = 0; int32_t vxattr = 0; br_vxattr_status_t status; + void *data = NULL; + + /** + * The key being present in the dict indicates the xattr was set on + * disk. The presence of xattr itself as of now is suffecient to say + * the the object is bad. + */ + *objbad = _gf_false; + ret = dict_get_bin (xattr, BITROT_OBJECT_BAD_KEY, (void **)&data); + if (!ret) + *objbad = _gf_true; ret = dict_get_bin (xattr, BITROT_CURRENT_VERSION_KEY, (void **)obuf); if (ret) |