Skip to content

Commit 5ec38cf

Browse files
authored
Merge pull request #147 from wenningerk/coverity_issues
Fix: query-watchdog: avoid issues on heap allocation failing
2 parents cf5c220 + 0e4534e commit 5ec38cf

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

sbd.spec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
Name: sbd
5151
Summary: Storage-based death
52-
License: GPLv2+
52+
License: GPL-2.0-or-later
5353
Group: System Environment/Daemons
5454
Version: 1.5.2
5555
Release: 99.%{buildnum}.%{shortcommit}.%{modified}git%{?dist}
@@ -95,7 +95,7 @@ Available rpmbuild rebuild options:
9595

9696
%package tests
9797
Summary: Storage-based death environment for regression tests
98-
License: GPLv2+
98+
License: GPL-2.0-or-later
9999
Group: System Environment/Daemons
100100

101101
%description tests

src/sbd-common.c

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,17 @@ watchdog_populate_list(void)
385385
struct link_list_item *lli =
386386
calloc(1, sizeof(struct link_list_item));
387387

388+
if (lli == NULL) {
389+
break;
390+
}
388391
lli->dev_node = strdup(buf);
389392
lli->link_name = strdup(entry_name);
393+
if ((lli->dev_node == NULL) || (lli->link_name == NULL)) {
394+
free(lli->dev_node);
395+
free(lli->link_name);
396+
free(lli);
397+
break;
398+
}
390399
lli->next = link_list;
391400
link_list = lli;
392401
}
@@ -404,18 +413,27 @@ watchdog_populate_list(void)
404413
if(!stat(entry_name, &statbuf) && S_ISCHR(statbuf.st_mode) &&
405414
is_watchdog(statbuf.st_rdev)) {
406415

407-
int wdfd = watchdog_init_fd(entry_name, -1);
416+
int wdfd;
408417
struct watchdog_list_item *wdg =
409418
calloc(1, sizeof(struct watchdog_list_item));
410419
int len;
411420
struct link_list_item *tmp_list = NULL;
412421

422+
if (wdg == NULL) {
423+
break;
424+
}
425+
413426
wdg->dev = statbuf.st_rdev;
414427
wdg->dev_node = strdup(entry_name);
428+
if (wdg->dev_node == NULL) {
429+
free(wdg);
430+
break;
431+
}
415432
wdg->next = watchdog_list;
416433
watchdog_list = wdg;
417434
watchdog_list_items++;
418435

436+
wdfd = watchdog_init_fd(entry_name, -1);
419437
if (wdfd >= 0) {
420438
struct watchdog_info ident;
421439

@@ -450,11 +468,18 @@ watchdog_populate_list(void)
450468
struct watchdog_list_item *dupe_wdg =
451469
calloc(1, sizeof(struct watchdog_list_item));
452470

471+
if (dupe_wdg == NULL) {
472+
break;
473+
}
453474
/* as long as we never purge watchdog_list
454475
* there is no need to dupe strings
455476
*/
456477
*dupe_wdg = *wdg;
457478
dupe_wdg->dev_node = strdup(tmp_list->link_name);
479+
if (dupe_wdg->dev_node == NULL) {
480+
free(dupe_wdg);
481+
break;
482+
}
458483
dupe_wdg->next = watchdog_list;
459484
watchdog_list = dupe_wdg;
460485
watchdog_list_items++;

src/sbd-md.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -441,9 +441,9 @@ init_device(struct sbd_context *st)
441441
}
442442
}
443443

444-
out: free(s_node);
444+
out: free(s_mbox);
445+
free(s_node);
445446
free(s_header);
446-
free(s_mbox);
447447
return(rc);
448448
}
449449

@@ -556,9 +556,9 @@ slot_allocate(struct sbd_context *st, const char *name)
556556
}
557557
}
558558

559-
out: free(s_node);
559+
out: free(s_mbox);
560+
free(s_node);
560561
free(s_header);
561-
free(s_mbox);
562562
return(rc);
563563
}
564564

@@ -1279,11 +1279,10 @@ int servant_md(const char *diskname, int mode, const void* argp)
12791279
}
12801280
}
12811281
out:
1282-
free(s_header);
12831282
free(s_node);
12841283
free(s_mbox);
1284+
free(s_header);
12851285
close_device(st);
12861286
exit(rc);
12871287
}
12881288

1289-

0 commit comments

Comments
 (0)