From owner-freebsd-audit Tue Jul 3 8:30:32 2001 Delivered-To: freebsd-audit@freebsd.org Received: from coffee.q9media.com (coffee.q9media.com [216.94.229.19]) by hub.freebsd.org (Postfix) with ESMTP id BEA5137B405 for ; Tue, 3 Jul 2001 08:30:21 -0700 (PDT) (envelope-from mike@coffee.q9media.com) Received: (from mike@localhost) by coffee.q9media.com (8.11.2/8.11.2) id f63FiaV07250; Tue, 3 Jul 2001 11:44:36 -0400 (EDT) (envelope-from mike) Date: Tue, 3 Jul 2001 11:44:36 -0400 (EDT) Message-Id: <200107031544.f63FiaV07250@coffee.q9media.com> To: Mike Heffner From: Mike Barcroft Cc: audit@FreeBSD.org, Mike Heffner Subject: Re: src/bin/chio patch Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Mike Barcroft writes: > Mike Barcroft writes: > > - strncpy(csvr.csvr_voltag.cv_volid, argv[2], > > + (void) memcpy(csvr.csvr_voltag.cv_volid, argv[2], > > sizeof(csvr.csvr_voltag.cv_volid)); > > + csvr.csvr_voltag.cv_volid[strlen(argv[2]) + 1] = '\0'; > > Hmm.. what was I thinking with this? It's probably better just > to use a cast. Also the NUL char is off by one byte and assumes > that strlen(argv[2]) < sizeof(csvr.csvr_voltag.cv_volid). > > I should go to sleep. I'll fix this in the morning. I've corrected this in the patch at the end of this message and also at: http://testbed.q9media.com/freebsd/chio.20010704.patch Best regards, Mike Barcroft ----------------------------------------------------------------------- chio.20010704.patch o Attempt to silence warnings generated on an Alpha. o Set WARNS?=2 Index: chio/Makefile =================================================================== RCS file: /home/ncvs/src/bin/chio/Makefile,v retrieving revision 1.9 diff -u -r1.9 Makefile --- chio/Makefile 2001/07/03 03:34:42 1.9 +++ chio/Makefile 2001/07/03 15:27:40 @@ -2,6 +2,7 @@ # @(#)Makefile 8.1 (Berkeley) 6/6/93 PROG= chio +WARNS?= 2 SRCS= chio.c .include Index: chio/chio.c =================================================================== RCS file: /home/ncvs/src/bin/chio/chio.c,v retrieving revision 1.18 diff -u -r1.18 chio.c --- chio/chio.c 2001/07/03 03:22:49 1.18 +++ chio/chio.c 2001/07/03 15:27:41 @@ -63,10 +63,11 @@ static const char * element_type_name __P((int et)); static int parse_special __P((char *)); static int is_special __P((char *)); -static const char *bits_to_string __P((int, const char *)); +static const char *bits_to_string __P((ces_status_flags, const char *)); static void find_element __P((char *, u_int16_t *, u_int16_t *)); -static struct changer_element_status *get_element_status __P((u_int16_t, u_int16_t)); +static struct changer_element_status *get_element_status + __P((unsigned int, unsigned int)); static int do_move __P((const char *, int, char **)); static int do_exchange __P((const char *, int, char **)); @@ -689,7 +690,7 @@ /* Allocate storage for the status structures. */ cesr.cesr_element_status = (struct changer_element_status *) - calloc(count, sizeof(struct changer_element_status)); + calloc((size_t)count, sizeof(struct changer_element_status)); if (!cesr.cesr_element_status) errx(1, "can't allocate status storage"); @@ -845,8 +846,8 @@ goto usage; } - strncpy(csvr.csvr_voltag.cv_volid, argv[2], - sizeof(csvr.csvr_voltag.cv_volid)); + strlcpy((char *)csvr.csvr_voltag.cv_volid, argv[2], + sizeof(csvr.csvr_voltag.cv_volid)); if (argc == 4) { csvr.csvr_voltag.cv_serial = atol(argv[3]); @@ -944,7 +945,7 @@ static const char * bits_to_string(v, cp) - int v; + ces_status_flags v; const char *cp; { const char *np; @@ -1006,7 +1007,8 @@ } ++argv; --argc; - ces = get_element_status(type, element); /* Get the status */ + /* Get the status */ + ces = get_element_status((unsigned int)type, (unsigned int)element); if (NULL == ces) errx(1, "%s: null element status pointer", cname); @@ -1042,22 +1044,22 @@ */ static struct changer_element_status * get_element_status(type, element) - u_int16_t type; - u_int16_t element; + unsigned int type; + unsigned int element; { struct changer_element_status_request cesr; struct changer_element_status *ces; ces = (struct changer_element_status *) - calloc(1, sizeof(struct changer_element_status)); + calloc((size_t)1, sizeof(struct changer_element_status)); if (NULL == ces) errx(1, "can't allocate status storage"); (void)memset(&cesr, 0, sizeof(cesr)); - cesr.cesr_element_type = type; - cesr.cesr_element_base = element; + cesr.cesr_element_type = (u_int16_t)type; + cesr.cesr_element_base = (u_int16_t)element; cesr.cesr_element_count = 1; /* Only this one element */ cesr.cesr_flags |= CESR_VOLTAGS; /* Grab voltags as well */ cesr.cesr_element_status = ces; @@ -1088,7 +1090,8 @@ struct changer_params cp; struct changer_element_status_request cesr; struct changer_element_status *ch_ces, *ces; - int elem, total_elem, found = 0; + int found = 0; + size_t elem, total_elem; /* * Get the changer parameters, we're interested in the counts @@ -1185,7 +1188,8 @@ continue; /* Check to see if it is our target */ - if (strcasecmp(voltag, ces->ces_pvoltag.cv_volid) == 0) { + if (strcasecmp(voltag, + (const char *)ces->ces_pvoltag.cv_volid) == 0) { *et = ces->ces_type; *eu = ces->ces_addr; ++found; To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message