1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-02-24 17:57:48 +03:00

coverity: cleanup related to lvmlockd

A couple missing mutex unlock on error bugs.
A bunch of buffer size/termination warnings.
This commit is contained in:
David Teigland 2015-07-09 11:28:59 -05:00
parent 1481125042
commit 6294509cc6
4 changed files with 33 additions and 31 deletions

View File

@ -647,6 +647,7 @@ static int add_pollfd(int fd)
tmp_pollfd = realloc(pollfd, new_size * sizeof(struct pollfd)); tmp_pollfd = realloc(pollfd, new_size * sizeof(struct pollfd));
if (!tmp_pollfd) { if (!tmp_pollfd) {
log_error("can't alloc new size %d for pollfd", new_size); log_error("can't alloc new size %d for pollfd", new_size);
pthread_mutex_unlock(&pollfd_mutex);
return -ENOMEM; return -ENOMEM;
} }
pollfd = tmp_pollfd; pollfd = tmp_pollfd;
@ -2994,15 +2995,15 @@ static int work_init_lv(struct action *act)
{ {
struct lockspace *ls; struct lockspace *ls;
char ls_name[MAX_NAME+1]; char ls_name[MAX_NAME+1];
char vg_args[MAX_ARGS]; char vg_args[MAX_ARGS+1];
char lv_args[MAX_ARGS]; char lv_args[MAX_ARGS+1];
uint64_t free_offset = 0; uint64_t free_offset = 0;
int lm_type = 0; int lm_type = 0;
int rv = 0; int rv = 0;
memset(ls_name, 0, sizeof(ls_name)); memset(ls_name, 0, sizeof(ls_name));
memset(vg_args, 0, MAX_ARGS); memset(vg_args, 0, sizeof(vg_args));
memset(lv_args, 0, MAX_ARGS); memset(lv_args, 0, sizeof(lv_args));
vg_ls_name(act->vg_name, ls_name); vg_ls_name(act->vg_name, ls_name);
@ -3543,6 +3544,7 @@ static int add_lock_action(struct action *act)
/* should not happen */ /* should not happen */
log_error("S %s add_lock_action bad lm_type %d ls %d", log_error("S %s add_lock_action bad lm_type %d ls %d",
ls_name, act->lm_type, ls->lm_type); ls_name, act->lm_type, ls->lm_type);
pthread_mutex_unlock(&lockspaces_mutex);
return -EINVAL; return -EINVAL;
} }
@ -4622,7 +4624,7 @@ static char *get_dm_uuid(char *dm_name)
} }
memset(_dm_uuid, 0, sizeof(_dm_uuid)); memset(_dm_uuid, 0, sizeof(_dm_uuid));
strcpy(_dm_uuid, uuid); strncpy(_dm_uuid, uuid, sizeof(_dm_uuid)-1);
dm_task_destroy(dmt); dm_task_destroy(dmt);
return _dm_uuid; return _dm_uuid;

View File

@ -112,7 +112,7 @@ static int read_cluster_name(char *clustername)
return fd; return fd;
} }
rv = read(fd, clustername, MAX_ARGS - 1); rv = read(fd, clustername, MAX_ARGS);
if (rv < 0) { if (rv < 0) {
log_error("read_cluster_name: cluster name read error %d, check dlm_controld", fd); log_error("read_cluster_name: cluster name read error %d, check dlm_controld", fd);
if (close(fd)) if (close(fd))
@ -130,8 +130,8 @@ static int read_cluster_name(char *clustername)
int lm_init_vg_dlm(char *ls_name, char *vg_name, uint32_t flags, char *vg_args) int lm_init_vg_dlm(char *ls_name, char *vg_name, uint32_t flags, char *vg_args)
{ {
char clustername[MAX_ARGS]; char clustername[MAX_ARGS+1];
char lock_args_version[MAX_ARGS]; char lock_args_version[MAX_ARGS+1];
int rv; int rv;
memset(clustername, 0, sizeof(clustername)); memset(clustername, 0, sizeof(clustername));
@ -158,8 +158,8 @@ int lm_init_vg_dlm(char *ls_name, char *vg_name, uint32_t flags, char *vg_args)
int lm_prepare_lockspace_dlm(struct lockspace *ls) int lm_prepare_lockspace_dlm(struct lockspace *ls)
{ {
char sys_clustername[MAX_ARGS]; char sys_clustername[MAX_ARGS+1];
char arg_clustername[MAX_ARGS]; char arg_clustername[MAX_ARGS+1];
struct lm_dlm *lmd; struct lm_dlm *lmd;
int rv; int rv;
@ -650,7 +650,7 @@ int lm_get_lockspaces_dlm(struct list_head *ls_rejoin)
int lm_is_running_dlm(void) int lm_is_running_dlm(void)
{ {
char sys_clustername[MAX_ARGS]; char sys_clustername[MAX_ARGS+1];
int rv; int rv;
memset(sys_clustername, 0, sizeof(sys_clustername)); memset(sys_clustername, 0, sizeof(sys_clustername));

View File

@ -127,8 +127,8 @@ struct action {
char vg_name[MAX_NAME+1]; char vg_name[MAX_NAME+1];
char lv_name[MAX_NAME+1]; char lv_name[MAX_NAME+1];
char lv_uuid[MAX_NAME+1]; char lv_uuid[MAX_NAME+1];
char vg_args[MAX_ARGS]; char vg_args[MAX_ARGS+1];
char lv_args[MAX_ARGS]; char lv_args[MAX_ARGS+1];
char vg_sysid[MAX_NAME+1]; char vg_sysid[MAX_NAME+1];
}; };
@ -145,7 +145,7 @@ struct resource {
struct list_head locks; struct list_head locks;
struct list_head actions; struct list_head actions;
struct val_blk *vb; struct val_blk *vb;
char lv_args[MAX_ARGS]; char lv_args[MAX_ARGS+1];
char lm_data[0]; /* lock manager specific data */ char lm_data[0]; /* lock manager specific data */
}; };
@ -164,7 +164,7 @@ struct lockspace {
char name[MAX_NAME+1]; char name[MAX_NAME+1];
char vg_name[MAX_NAME+1]; char vg_name[MAX_NAME+1];
char vg_uuid[64]; char vg_uuid[64];
char vg_args[MAX_ARGS]; /* lock manager specific args */ char vg_args[MAX_ARGS+1]; /* lock manager specific args */
char vg_sysid[MAX_NAME+1]; char vg_sysid[MAX_NAME+1];
int8_t lm_type; /* lock manager: LM_DLM, LM_SANLOCK */ int8_t lm_type; /* lock manager: LM_DLM, LM_SANLOCK */
void *lm_data; void *lm_data;

View File

@ -167,7 +167,7 @@ static int lock_lv_name_from_args(char *vg_args, char *lock_lv_name)
static int lock_lv_offset_from_args(char *lv_args, uint64_t *lock_lv_offset) static int lock_lv_offset_from_args(char *lv_args, uint64_t *lock_lv_offset)
{ {
char offset_str[MAX_ARGS]; char offset_str[MAX_ARGS+1];
int rv; int rv;
memset(offset_str, 0, sizeof(offset_str)); memset(offset_str, 0, sizeof(offset_str));
@ -256,8 +256,8 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
struct sanlk_lockspace ss; struct sanlk_lockspace ss;
struct sanlk_resourced rd; struct sanlk_resourced rd;
struct sanlk_disk disk; struct sanlk_disk disk;
char lock_lv_name[MAX_ARGS]; char lock_lv_name[MAX_ARGS+1];
char lock_args_version[MAX_ARGS]; char lock_args_version[MAX_ARGS+1];
const char *gl_name = NULL; const char *gl_name = NULL;
uint32_t daemon_version; uint32_t daemon_version;
uint32_t daemon_proto; uint32_t daemon_proto;
@ -285,7 +285,7 @@ int lm_init_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_ar
if (strlen(lock_lv_name) + strlen(lock_args_version) + 2 > MAX_ARGS) if (strlen(lock_lv_name) + strlen(lock_args_version) + 2 > MAX_ARGS)
return -EARGS; return -EARGS;
snprintf(disk.path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", vg_name, lock_lv_name); snprintf(disk.path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
log_debug("S %s init_vg_san path %s", ls_name, disk.path); log_debug("S %s init_vg_san path %s", ls_name, disk.path);
@ -423,8 +423,8 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
char *vg_args, char *lv_args, uint64_t free_offset) char *vg_args, char *lv_args, uint64_t free_offset)
{ {
struct sanlk_resourced rd; struct sanlk_resourced rd;
char lock_lv_name[MAX_ARGS]; char lock_lv_name[MAX_ARGS+1];
char lock_args_version[MAX_ARGS]; char lock_args_version[MAX_ARGS+1];
uint64_t offset; uint64_t offset;
int align_size; int align_size;
int rv; int rv;
@ -445,7 +445,7 @@ int lm_init_lv_sanlock(char *ls_name, char *vg_name, char *lv_name,
strncpy(rd.rs.lockspace_name, ls_name, SANLK_NAME_LEN); strncpy(rd.rs.lockspace_name, ls_name, SANLK_NAME_LEN);
rd.rs.num_disks = 1; rd.rs.num_disks = 1;
snprintf(rd.rs.disks[0].path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", vg_name, lock_lv_name); snprintf(rd.rs.disks[0].path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
align_size = sanlock_align(&rd.rs.disks[0]); align_size = sanlock_align(&rd.rs.disks[0]);
if (align_size <= 0) { if (align_size <= 0) {
@ -529,7 +529,7 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
struct sanlk_lockspace ss; struct sanlk_lockspace ss;
struct sanlk_resourced rd; struct sanlk_resourced rd;
struct sanlk_disk disk; struct sanlk_disk disk;
char lock_lv_name[MAX_ARGS]; char lock_lv_name[MAX_ARGS+1];
uint64_t offset; uint64_t offset;
uint32_t io_timeout; uint32_t io_timeout;
int align_size; int align_size;
@ -550,7 +550,7 @@ int lm_rename_vg_sanlock(char *ls_name, char *vg_name, uint32_t flags, char *vg_
return rv; return rv;
} }
snprintf(disk.path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", vg_name, lock_lv_name); snprintf(disk.path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s", vg_name, lock_lv_name);
log_debug("S %s rename_vg_san path %s", ls_name, disk.path); log_debug("S %s rename_vg_san path %s", ls_name, disk.path);
@ -730,7 +730,7 @@ int lm_ex_disable_gl_sanlock(struct lockspace *ls)
strncpy(rd2.rs.name, R_NAME_GL_DISABLED, SANLK_NAME_LEN); strncpy(rd2.rs.name, R_NAME_GL_DISABLED, SANLK_NAME_LEN);
rd1.rs.num_disks = 1; rd1.rs.num_disks = 1;
strncpy(rd1.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN); strncpy(rd1.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
rd1.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN; rd1.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN;
rv = sanlock_acquire(lms->sock, -1, 0, 1, &rs1, NULL); rv = sanlock_acquire(lms->sock, -1, 0, 1, &rs1, NULL);
@ -788,7 +788,7 @@ int lm_able_gl_sanlock(struct lockspace *ls, int enable)
strncpy(rd.rs.name, gl_name, SANLK_NAME_LEN); strncpy(rd.rs.name, gl_name, SANLK_NAME_LEN);
rd.rs.num_disks = 1; rd.rs.num_disks = 1;
strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN); strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
rd.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN; rd.rs.disks[0].offset = lms->align_size * GL_LOCK_BEGIN;
rv = sanlock_write_resource(&rd.rs, 0, 0, 0); rv = sanlock_write_resource(&rd.rs, 0, 0, 0);
@ -827,7 +827,7 @@ static int gl_is_enabled(struct lockspace *ls, struct lm_sanlock *lms)
/* leave rs.name empty, it is what we're checking */ /* leave rs.name empty, it is what we're checking */
rd.rs.num_disks = 1; rd.rs.num_disks = 1;
strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN); strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
offset = lms->align_size * GL_LOCK_BEGIN; offset = lms->align_size * GL_LOCK_BEGIN;
rd.rs.disks[0].offset = offset; rd.rs.disks[0].offset = offset;
@ -885,7 +885,7 @@ int lm_find_free_lock_sanlock(struct lockspace *ls, uint64_t *free_offset)
strncpy(rd.rs.lockspace_name, ls->name, SANLK_NAME_LEN); strncpy(rd.rs.lockspace_name, ls->name, SANLK_NAME_LEN);
rd.rs.num_disks = 1; rd.rs.num_disks = 1;
strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN); strncpy(rd.rs.disks[0].path, lms->ss.host_id_disk.path, SANLK_PATH_LEN-1);
offset = lms->align_size * LV_LOCK_BEGIN; offset = lms->align_size * LV_LOCK_BEGIN;
@ -960,7 +960,7 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
{ {
struct stat st; struct stat st;
struct lm_sanlock *lms = NULL; struct lm_sanlock *lms = NULL;
char lock_lv_name[MAX_ARGS]; char lock_lv_name[MAX_ARGS+1];
char lsname[SANLK_NAME_LEN + 1]; char lsname[SANLK_NAME_LEN + 1];
char disk_path[SANLK_PATH_LEN]; char disk_path[SANLK_PATH_LEN];
int gl_found; int gl_found;
@ -983,7 +983,7 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
goto fail; goto fail;
} }
snprintf(disk_path, SANLK_PATH_LEN, "/dev/mapper/%s-%s", snprintf(disk_path, SANLK_PATH_LEN-1, "/dev/mapper/%s-%s",
ls->vg_name, lock_lv_name); ls->vg_name, lock_lv_name);
/* /*
@ -1035,7 +1035,7 @@ int lm_prepare_lockspace_sanlock(struct lockspace *ls)
memcpy(lms->ss.name, lsname, SANLK_NAME_LEN); memcpy(lms->ss.name, lsname, SANLK_NAME_LEN);
lms->ss.host_id_disk.offset = 0; lms->ss.host_id_disk.offset = 0;
lms->ss.host_id = ls->host_id; lms->ss.host_id = ls->host_id;
strncpy(lms->ss.host_id_disk.path, disk_path, SANLK_PATH_LEN); strncpy(lms->ss.host_id_disk.path, disk_path, SANLK_PATH_LEN-1);
if (daemon_test) { if (daemon_test) {
if (!gl_lsname_sanlock[0]) { if (!gl_lsname_sanlock[0]) {