glusterd: fix gcc7 warnings

[sh]$ gcc --version
    gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)

Warnings were of the type below:

xlators/mgmt/glusterd/src/glusterd-store.c:3285:33:
warning: ‘/options’ directive output may be truncated writing 8 bytes into a region of size between 1 and 4096 [-Wformat-truncation=]
         snprintf (path, len, "%s/options", conf->workdir);
                                 ^~~~~~~~
xlators/mgmt/glusterd/src/glusterd-store.c:1280:39:
warning: ‘/snaps/’ directive output may be truncated writing 7 bytes into a region of size between 1 and 4096 [-Wformat-truncation=]
         snprintf (snap_fpath, len, "%s/snaps/%s/%s", priv->workdir,
                                       ^~~~~~~

* Also changed some places where there was issues with key size
* Made sure all the 'char buf[SOMESIZE] = {0,};' are changed to 'char buf[SOMESIZE] = "";`
  - In the files I changed

* Also edited coding standard to reflect that.

updates: bz#1193929
Change-Id: I04c652624ac63199cea2077e46b3a5def37c3689
Signed-off-by: Amar Tumballi <amarts@redhat.com>
This commit is contained in:
Amar Tumballi 2018-07-20 14:27:57 +05:30 committed by Atin Mukherjee
parent d339f87a6f
commit 1f3bfe7b5d
3 changed files with 54 additions and 22 deletions

View File

@ -156,6 +156,28 @@ instead.
gf_boolean_t port_inuse[65536]; /* 256KB, this actually happened */
```
NOTE: Ideal is to limit the stack array to less than 256 bytes.
Character array initializing
----------------------------
It is recommended to keep the character array initializing to empty string.
*Good:*
```
char msg[1024] = "";
```
Not so much recommended, even though it means the same.
```
char msg[1024] = {0,};
```
We recommend above to structure initialization.
Validate all arguments to a function
------------------------------------

View File

@ -416,7 +416,7 @@ __glusterd_handle_add_brick (rpcsvc_request_t *req)
char *volname = NULL;
int brick_count = 0;
void *cli_rsp = NULL;
char err_str[2048] = {0,};
char err_str[2048] = "";
gf_cli_rsp rsp = {0,};
glusterd_volinfo_t *volinfo = NULL;
xlator_t *this = NULL;
@ -777,8 +777,8 @@ subvol_matcher_destroy (int *subvols)
int
glusterd_set_detach_bricks(dict_t *dict, glusterd_volinfo_t *volinfo)
{
char key[256] = {0,};
char value[256] = {0,};
char key[64] = "";
char value[2048] = ""; /* hostname + path */
int brick_num = 0;
int hot_brick_num = 0;
glusterd_brickinfo_t *brickinfo;
@ -885,16 +885,16 @@ __glusterd_handle_remove_brick (rpcsvc_request_t *req)
dict_t *dict = NULL;
int32_t count = 0;
char *brick = NULL;
char key[256] = {0,};
char key[64] = "";
int i = 1;
glusterd_volinfo_t *volinfo = NULL;
glusterd_brickinfo_t *brickinfo = NULL;
glusterd_brickinfo_t **brickinfo_list = NULL;
int *subvols = NULL;
char err_str[2048] = {0};
char err_str[2048] = "";
gf_cli_rsp rsp = {0,};
void *cli_rsp = NULL;
char vol_type[256] = {0,};
char vol_type[256] = "";
int32_t replica_count = 0;
char *volname = 0;
xlator_t *this = NULL;
@ -1319,10 +1319,9 @@ glusterd_op_perform_add_bricks (glusterd_volinfo_t *volinfo, int32_t count,
glusterd_brickinfo_t *brickinfo = NULL;
glusterd_gsync_status_temp_t param = {0, };
gf_boolean_t restart_needed = 0;
char msg[1024] __attribute__((unused)) = {0, };
int caps = 0;
int brickid = 0;
char key[PATH_MAX] = "";
char key[64] = "";
char *brick_mount_dir = NULL;
xlator_t *this = NULL;
glusterd_conf_t *conf = NULL;
@ -1521,6 +1520,7 @@ glusterd_op_perform_add_bricks (glusterd_volinfo_t *volinfo, int32_t count,
if (ret)
goto out;
#ifdef HAVE_BD_XLATOR
char msg[1024] = "";
/* Check for VG/thin pool if its BD volume */
if (brickinfo->vg[0]) {
ret = glusterd_is_valid_vg (brickinfo, 0, msg);
@ -1674,8 +1674,8 @@ glusterd_op_stage_add_brick (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
glusterd_brickinfo_t *brickinfo = NULL;
glusterd_volinfo_t *volinfo = NULL;
xlator_t *this = NULL;
char msg[2048] = {0,};
char key[PATH_MAX] = "";
char msg[4096] = "";
char key[64] = "";
gf_boolean_t brick_alloc = _gf_false;
char *all_bricks = NULL;
char *str_ret = NULL;
@ -1997,8 +1997,8 @@ glusterd_remove_brick_validate_bricks (gf1_op_commands cmd, int32_t brick_count,
gf_cli_defrag_type cmd_defrag)
{
char *brick = NULL;
char msg[2048] = {0,};
char key[256] = {0,};
char msg[2048] = "";
char key[64] = "";
glusterd_brickinfo_t *brickinfo = NULL;
glusterd_peerinfo_t *peerinfo = NULL;
int i = 0;
@ -2140,7 +2140,7 @@ glusterd_op_stage_remove_brick (dict_t *dict, char **op_errstr)
glusterd_volinfo_t *volinfo = NULL;
char *errstr = NULL;
int32_t brick_count = 0;
char msg[2048] = {0,};
char msg[2048] = "";
int32_t flag = 0;
gf1_op_commands cmd = GF_OP_CMD_NONE;
char *task_id_str = NULL;
@ -2719,9 +2719,9 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr)
char *brick = NULL;
int32_t count = 0;
int32_t i = 1;
char key[256] = {0,};
char key[64] = "";
int32_t flag = 0;
char err_str[4096] = {0,};
char err_str[4096] = "";
int need_rebalance = 0;
int force = 0;
gf1_op_commands cmd = 0;
@ -3243,7 +3243,7 @@ __glusterd_handle_add_tier_brick (rpcsvc_request_t *req)
char *volname = NULL;
int brick_count = 0;
void *cli_rsp = NULL;
char err_str[2048] = {0,};
char err_str[2048] = "";
gf_cli_rsp rsp = {0,};
glusterd_volinfo_t *volinfo = NULL;
xlator_t *this = NULL;

View File

@ -141,6 +141,16 @@ struct glusterd_volgen {
dict_t *dict;
};
/* Keeping all the paths required in glusterd would
cause many buffer overflow errors, as we append
more defined paths to the brick path, workdir etc etc.
It is better to keep limit on this as lesser value,
so we get an option to continue with all functionalities.
For example, snapname max would be appended on brick-path and
would be stored on workdir... all of these being PATH_MAX, is
not an ideal situation for success. */
#define VALID_GLUSTERD_PATHMAX (PATH_MAX - (256 + 64))
typedef struct {
struct _volfile_ctx *volfile;
pthread_mutex_t mutex;
@ -148,8 +158,8 @@ typedef struct {
gf_boolean_t verify_volfile_checksum;
gf_boolean_t trace;
uuid_t uuid;
char workdir[PATH_MAX];
char rundir[PATH_MAX];
char workdir[VALID_GLUSTERD_PATHMAX];
char rundir[VALID_GLUSTERD_PATHMAX];
rpcsvc_t *rpc;
glusterd_svc_t shd_svc;
glusterd_svc_t nfs_svc;
@ -212,10 +222,10 @@ typedef enum gf_brick_status {
struct glusterd_brickinfo {
char hostname[1024];
char path[PATH_MAX];
char real_path[PATH_MAX];
char device_path[PATH_MAX];
char mount_dir[PATH_MAX];
char path[VALID_GLUSTERD_PATHMAX];
char real_path[VALID_GLUSTERD_PATHMAX];
char device_path[VALID_GLUSTERD_PATHMAX];
char mount_dir[VALID_GLUSTERD_PATHMAX];
char brick_id[1024];/*Client xlator name, AFR changelog name*/
char fstype [NAME_MAX]; /* Brick file-system type */
char mnt_opts [1024]; /* Brick mount options */