Skip to content

Commit 3f0bff8

Browse files
authored
Merge pull request #356 from hreinecke/coverity
Coverity fixes
2 parents 62ec078 + a453143 commit 3f0bff8

4 files changed

Lines changed: 38 additions & 21 deletions

File tree

examples/telemetry-listen.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ static void save_telemetry(nvme_ctrl_t c)
5555
free(log);
5656
return;
5757
}
58-
log_size = (le16_to_cpu(log->dalb3) + 1) * NVME_LOG_TELEM_BLOCK_SIZE;
5958

6059
fd = open(buf, O_CREAT|O_WRONLY, S_IRUSR|S_IRGRP);
6160
if (fd < 0) {
@@ -77,8 +76,10 @@ static void check_telemetry(nvme_ctrl_t c, int ufd)
7776
{
7877
char buf[0x1000] = { 0 };
7978
char *p, *ptr;
79+
int len;
8080

81-
if (read(ufd, buf, sizeof(buf)) < 0)
81+
len = read(ufd, buf, sizeof(buf) - 1);
82+
if (len < 0)
8283
return;
8384

8485
ptr = buf;
@@ -140,7 +141,7 @@ int main()
140141
nvme_subsystem_for_each_ctrl(s, c)
141142
i++;
142143

143-
e = calloc(i, sizeof(e));
144+
e = calloc(i, sizeof(struct events));
144145
FD_ZERO(&fds);
145146
i = 0;
146147

src/nvme/fabrics.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -316,16 +316,19 @@ static int inet6_pton(nvme_root_t r, const char *src, uint16_t port,
316316
{
317317
int ret = -EINVAL;
318318
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr;
319+
const char *scope = NULL;
320+
char *p;
319321

320322
if (strlen(src) > INET6_ADDRSTRLEN)
321323
return -EINVAL;
322324

323325
char *tmp = strdup(src);
324-
if (!tmp)
326+
if (!tmp) {
325327
nvme_msg(r, LOG_ERR, "cannot copy: %s\n", src);
328+
return -ENOMEM;
329+
}
326330

327-
const char *scope = NULL;
328-
char *p = strchr(tmp, '%');
331+
p = strchr(tmp, '%');
329332
if (p) {
330333
*p = '\0';
331334
scope = src + (p - tmp) + 1;
@@ -527,7 +530,8 @@ static int __nvmf_add_ctrl(nvme_root_t r, const char *argstr)
527530
goto out_close;
528531
}
529532

530-
len = read(fd, buf, sizeof(buf));
533+
memset(buf, 0x0, sizeof(buf));
534+
len = read(fd, buf, sizeof(buf) - 1);
531535
if (len < 0) {
532536
nvme_msg(r, LOG_ERR, "Failed to read from %s: %s\n",
533537
nvmf_dev, strerror(errno));
@@ -1262,12 +1266,14 @@ static const char *dctype_str[] = {
12621266
* sysfs. We must get them directly from the controller by performing an
12631267
* identify command.
12641268
*/
1265-
static void nvme_fetch_cntrltype_dctype_from_id(nvme_ctrl_t c)
1269+
static int nvme_fetch_cntrltype_dctype_from_id(nvme_ctrl_t c)
12661270
{
12671271
struct nvme_id_ctrl id = { 0 };
1272+
int ret;
12681273

1269-
if (nvme_ctrl_identify(c, &id))
1270-
return;
1274+
ret = nvme_ctrl_identify(c, &id);
1275+
if (ret)
1276+
return ret;
12711277

12721278
if (!c->cntrltype) {
12731279
if (id.cntrltype > NVME_CTRL_CNTRLTYPE_ADMIN || !cntrltype_str[id.cntrltype])
@@ -1282,12 +1288,14 @@ static void nvme_fetch_cntrltype_dctype_from_id(nvme_ctrl_t c)
12821288
else
12831289
c->dctype = strdup(dctype_str[id.dctype]);
12841290
}
1291+
return 0;
12851292
}
12861293

12871294
bool nvmf_is_registration_supported(nvme_ctrl_t c)
12881295
{
12891296
if (!c->cntrltype || !c->dctype)
1290-
nvme_fetch_cntrltype_dctype_from_id(c);
1297+
if (nvme_fetch_cntrltype_dctype_from_id(c))
1298+
return false;
12911299

12921300
return !strcmp(c->dctype, "ddc") || !strcmp(c->dctype, "cdc");
12931301
}

src/nvme/tree.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ static int nvme_scan_subsystem(struct nvme_root *r, const char *name,
578578
nvme_msg(r, LOG_WARNING, "NQN mismatch for subsystem '%s'\n",
579579
name);
580580
s = NULL;
581+
free(subsysnqn);
581582
errno = EINVAL;
582583
return -1;
583584
}
@@ -1092,20 +1093,26 @@ static char *nvme_ctrl_lookup_subsystem_name(nvme_root_t r,
10921093
struct dirent **subsys;
10931094
char *subsys_name = NULL;
10941095
int ret, i;
1095-
char path[PATH_MAX];
10961096

10971097
ret = nvme_scan_subsystems(&subsys);
10981098
if (ret < 0)
10991099
return NULL;
11001100
for (i = 0; i < ret; i++) {
11011101
struct stat st;
1102+
char *path;
11021103

1103-
sprintf(path, "%s/%s/%s", nvme_subsys_sysfs_dir,
1104-
subsys[i]->d_name, ctrl_name);
1104+
if (asprintf(&path, "%s/%s/%s", nvme_subsys_sysfs_dir,
1105+
subsys[i]->d_name, ctrl_name) < 0) {
1106+
errno = ENOMEM;
1107+
return NULL;
1108+
}
11051109
nvme_msg(r, LOG_DEBUG, "lookup subsystem %s\n", path);
1106-
if (stat(path, &st) < 0)
1110+
if (stat(path, &st) < 0) {
1111+
free(path);
11071112
continue;
1113+
}
11081114
subsys_name = strdup(subsys[i]->d_name);
1115+
free(path);
11091116
break;
11101117
}
11111118
nvme_free_dirents(subsys, ret);
@@ -1293,12 +1300,10 @@ static nvme_ctrl_t nvme_ctrl_alloc(nvme_root_t r, nvme_subsystem_t s,
12931300
free(transport);
12941301
if (address)
12951302
free(address);
1296-
if (!c) {
1297-
if (!p) {
1298-
nvme_msg(r, LOG_ERR, "failed to lookup ctrl\n");
1299-
errno = ENODEV;
1300-
} else
1301-
errno = ENOMEM;
1303+
if (!c && !p) {
1304+
nvme_msg(r, LOG_ERR, "failed to lookup ctrl\n");
1305+
errno = ENODEV;
1306+
free(addr);
13021307
return NULL;
13031308
}
13041309
c->address = addr;
@@ -1360,6 +1365,7 @@ nvme_ctrl_t nvme_scan_ctrl(nvme_root_t r, const char *name)
13601365
nvme_msg(r, LOG_ERR,
13611366
"failed to lookup subsystem for controller %s\n",
13621367
name);
1368+
free(subsysnqn);
13631369
free(path);
13641370
errno = ENXIO;
13651371
return NULL;

test/zns.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ static void show_zns_properties(nvme_ns_t n)
4040

4141
if (nvme_zns_identify_ctrl(nvme_ns_get_fd(n), &zns_ctrl)) {
4242
fprintf(stderr, "failed to identify zns ctrl\n");;
43+
free(zr);
4344
return;
4445
}
4546

@@ -51,6 +52,7 @@ static void show_zns_properties(nvme_ns_t n)
5152
NVME_DEFAULT_IOCTL_TIMEOUT, &result)) {
5253
fprintf(stderr, "failed to report zones, result %x\n",
5354
le32_to_cpu(result));
55+
free(zr);
5456
return;
5557
}
5658

0 commit comments

Comments
 (0)