summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authortruckman <truckman@FreeBSD.org>2016-05-25 15:43:01 +0000
committertruckman <truckman@FreeBSD.org>2016-05-25 15:43:01 +0000
commit4122004b6c02f0c54d5381e35543c4413bee2cd4 (patch)
tree28c01cc3875051594d7b04b8fbc380bc5f67c732 /sbin
parentf98bda461d8f7c3915855e0713c074b9faf660f3 (diff)
downloadFreeBSD-src-4122004b6c02f0c54d5381e35543c4413bee2cd4.zip
FreeBSD-src-4122004b6c02f0c54d5381e35543c4413bee2cd4.tar.gz
Fix a couple of new instances of a false positive Coverity buffer
overflow defect. Use the new CCB_CLEAR_ALL_EXCEPT_HDR() macro instead of the calling bzero() on the pointer to the header used as an array and indexed by 1. Don't leak a buffer after executing "goto restart_report" by overwriting its pointer with the results of another calloc(). Be sure to clear the buffer before reusing it. (CID 1356042) Reported by: Coverity CID: 1356022, 1356034, 1356023, 1356035, 1356042 Reviewed by: ken
Diffstat (limited to 'sbin')
-rw-r--r--sbin/camcontrol/epc.c3
-rw-r--r--sbin/camcontrol/zone.c8
2 files changed, 6 insertions, 5 deletions
diff --git a/sbin/camcontrol/epc.c b/sbin/camcontrol/epc.c
index 10d76f6..783db59 100644
--- a/sbin/camcontrol/epc.c
+++ b/sbin/camcontrol/epc.c
@@ -633,8 +633,7 @@ epc(struct cam_device *device, int argc, char **argv, char *combinedopt,
goto bailout;
}
- bzero(&(&ccb->ccb_h)[1],
- sizeof(union ccb) - sizeof(struct ccb_hdr));
+ CCB_CLEAR_ALL_EXCEPT_HDR(ccb);
while ((c = getopt(argc, argv, combinedopt)) != -1) {
switch (c) {
diff --git a/sbin/camcontrol/zone.c b/sbin/camcontrol/zone.c
index aaf172e..87a1842 100644
--- a/sbin/camcontrol/zone.c
+++ b/sbin/camcontrol/zone.c
@@ -347,8 +347,7 @@ zone(struct cam_device *device, int argc, char **argv, char *combinedopt,
goto bailout;
}
- bzero(&(&ccb->ccb_h)[1],
- sizeof(union ccb) - sizeof(struct ccb_hdr));
+ CCB_CLEAR_ALL_EXCEPT_HDR(ccb);
while ((c = getopt(argc, argv, combinedopt)) != -1) {
switch (c) {
@@ -484,7 +483,8 @@ restart_report:
sector_count = ZAC_ATA_SECTOR_COUNT(alloc_len);
protocol = AP_PROTO_DMA;
} else {
- cdb_storage = calloc(cdb_storage_len, 1);
+ if (cdb_storage == NULL)
+ cdb_storage = calloc(cdb_storage_len, 1);
if (cdb_storage == NULL)
err(1, "couldn't allocate memory");
@@ -662,6 +662,8 @@ restart_report:
if (zp_status == ZONE_PRINT_MORE_DATA) {
bzero(ccb, sizeof(*ccb));
first_pass = 0;
+ if (cdb_storage != NULL)
+ bzero(cdb_storage, cdb_storage_len);
goto restart_report;
} else if (zp_status == ZONE_PRINT_ERROR)
error = 1;
OpenPOWER on IntegriCloud