From c886643f97373944030c118b7f78d0a8c06b2291 Mon Sep 17 00:00:00 2001 From: Pranith K Date: Mon, 14 Mar 2011 04:20:51 +0000 Subject: cluster/afr: Fix wrong memory allocation Signed-off-by: Pranith Kumar K Signed-off-by: Vijay Bellur BUG: 2517 (the size of allocated memory may be wrong) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2517 --- xlators/cluster/afr/src/afr-self-heal-common.c | 2 +- xlators/cluster/afr/src/afr-transaction.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'xlators/cluster/afr/src') diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c index e716e20ef51..30f0cbe09da 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.c +++ b/xlators/cluster/afr/src/afr-self-heal-common.c @@ -118,7 +118,7 @@ afr_sh_print_pending_matrix (int32_t *pending_matrix[], xlator_t *this) void afr_sh_build_pending_matrix (afr_private_t *priv, int32_t *pending_matrix[], dict_t *xattr[], - int child_count, afr_transaction_type type) + int child_count, afr_transaction_type type) { int i, j, k; diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index d48d6eb72f4..4afb7ce6f2a 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -308,24 +308,25 @@ afr_set_piggyback_dict (afr_private_t *priv, dict_t *xattr, int32_t **pending, int ret = 0; int *arr = NULL; int index = 0; + size_t pending_xattr_size = 3 * sizeof (int32_t); + /* 3 = data+metadata+entry */ index = afr_index_for_transaction_type (type); for (i = 0; i < priv->child_count; i++) { - arr = GF_CALLOC (3 * sizeof (int32_t), priv->child_count, + arr = GF_CALLOC (1, pending_xattr_size, gf_afr_mt_char); if (!arr) { ret = -1; goto out; } - memcpy (arr, pending[i], 3 * sizeof (int32_t)); + memcpy (arr, pending[i], pending_xattr_size); arr[index]++; ret = dict_set_bin (xattr, priv->pending_key[i], - arr, 3 * sizeof (int32_t)); - /* 3 = data+metadata+entry */ + arr, pending_xattr_size); if (ret < 0) goto out; -- cgit