Mercurial > illumos > illumos-gate
changeset 4003:70e1c9a81b40
6542621 sun4v picl code needs to conform to secprog guidelines
author | vivek |
---|---|
date | Tue, 10 Apr 2007 11:17:42 -0700 |
parents | d12f36b7c388 |
children | 027a924f9ee3 |
files | usr/src/cmd/picl/plugins/sun4v/lib/snmp/snmplib.c usr/src/cmd/picl/plugins/sun4v/pri/priplugin.c usr/src/lib/libprtdiag/common/display_sun4v.c |
diffstat | 3 files changed, 53 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/picl/plugins/sun4v/lib/snmp/snmplib.c Tue Apr 10 11:12:59 2007 -0700 +++ b/usr/src/cmd/picl/plugins/sun4v/lib/snmp/snmplib.c Tue Apr 10 11:17:42 2007 -0700 @@ -1224,21 +1224,24 @@ char *oidstr; char subid_str[MAX_INT_LEN]; int i, isize; + size_t oidstr_sz; /* * ugly, but for now this will have to do. */ - oidstr = (char *)calloc(1, MAX_INT_LEN * n_subids); + oidstr_sz = sizeof (subid_str) * n_subids; + oidstr = calloc(1, oidstr_sz); for (i = 0; i < n_subids; i++) { - (void) memset(subid_str, 0, MAX_INT_LEN); - isize = snprintf(subid_str, MAX_INT_LEN, "%d", objid[i]); - if (isize >= MAX_INT_LEN) + (void) memset(subid_str, 0, sizeof (subid_str)); + isize = snprintf(subid_str, sizeof (subid_str), "%d", + objid[i]); + if (isize >= sizeof (subid_str)) return (NULL); - (void) strcat(oidstr, subid_str); + (void) strlcat(oidstr, subid_str, oidstr_sz); if (i < (n_subids - 1)) - (void) strcat(oidstr, "."); + (void) strlcat(oidstr, ".", oidstr_sz); } return (oidstr);
--- a/usr/src/cmd/picl/plugins/sun4v/pri/priplugin.c Tue Apr 10 11:12:59 2007 -0700 +++ b/usr/src/cmd/picl/plugins/sun4v/pri/priplugin.c Tue Apr 10 11:17:42 2007 -0700 @@ -54,7 +54,7 @@ propinfo->piclinfo.type = type; propinfo->piclinfo.accessmode = PICL_READ; propinfo->piclinfo.size = size; - (void) strncpy(propinfo->piclinfo.name, name, + (void) strlcpy(propinfo->piclinfo.name, name, sizeof (propinfo->piclinfo.name)); }
--- a/usr/src/lib/libprtdiag/common/display_sun4v.c Tue Apr 10 11:12:59 2007 -0700 +++ b/usr/src/lib/libprtdiag/common/display_sun4v.c Tue Apr 10 11:17:42 2007 -0700 @@ -187,12 +187,13 @@ { char *compatible; - (void) strcpy(card->bus_type, "PCIX"); + (void) strlcpy(card->bus_type, "PCIX", sizeof (card->bus_type)); if (sun4v_get_first_compatible_value(nodeh, &compatible) == PICL_SUCCESS) { if (strncmp(compatible, PCIE_COMPATIBLE_STR, strlen(PCIE_COMPATIBLE_STR)) == 0) - (void) strcpy(card->bus_type, "PCIE"); + (void) strlcpy(card->bus_type, "PCIE", + sizeof (card->bus_type)); free(compatible); } } @@ -208,7 +209,7 @@ if (err != PICL_SUCCESS) return (err); - (void) strcpy(card->slot_str, val); + (void) strlcpy(card->slot_str, val, sizeof (card->slot_str)); card->slot = -1; return (PICL_SUCCESS); } @@ -231,7 +232,8 @@ while (err == PICL_SUCCESS) { if (picl_get_propval_by_name(nodeh, PICL_PROP_PARENT, &pnodeh, sizeof (pnodeh)) != PICL_SUCCESS) { - (void) strcpy(card->slot_str, IOBOARD); + (void) strlcpy(card->slot_str, IOBOARD, + sizeof (card->slot_str)); card->slot = -1; return; } @@ -243,18 +245,21 @@ } if (picl_get_propval_by_name(nodeh, PICL_PROP_UNIT_ADDRESS, uaddr, sizeof (uaddr)) != PICL_SUCCESS) { - (void) strcpy(card->slot_str, IOBOARD); + (void) strlcpy(card->slot_str, IOBOARD, + sizeof (card->slot_str)); card->slot = -1; return; } pval = (uint8_t *)malloc(pinfo.size); if (!pval) { - (void) strcpy(card->slot_str, IOBOARD); + (void) strlcpy(card->slot_str, IOBOARD, + sizeof (card->slot_str)); card->slot = -1; return; } if (picl_get_propval(proph, pval, pinfo.size) != PICL_SUCCESS) { - (void) strcpy(card->slot_str, IOBOARD); + (void) strlcpy(card->slot_str, IOBOARD, + sizeof (card->slot_str)); card->slot = -1; free(pval); return; @@ -271,7 +276,8 @@ } card->slot = atol(uaddr); if (((1 << card->slot) & dev_mask) == 0) { - (void) strcpy(card->slot_str, IOBOARD); + (void) strlcpy(card->slot_str, IOBOARD, + sizeof (card->slot_str)); card->slot = -1; } else { char *p = (char *)(pval+sizeof (dev_mask)); @@ -287,7 +293,8 @@ while (p[i++] != '\0'); count--; } - (void) strcpy(card->slot_str, (char *)(p+i)); + (void) strlcpy(card->slot_str, (char *)(p+i), + sizeof (card->slot_str)); } free(pval); } @@ -356,14 +363,14 @@ err = picl_get_propval_by_name(nodeh, PICL_PROP_NAME, name, sizeof (name)); if (err == PICL_PROPNOTFOUND) - (void) strcpy(name, ""); + (void) strlcpy(name, "", sizeof (name)); else if (err != PICL_SUCCESS) return (err); err = picl_get_propval_by_name(nodeh, PICL_PROP_STATUS, val, sizeof (val)); if (err == PICL_PROPNOTFOUND) - (void) strcpy(val, ""); + (void) strlcpy(val, "", sizeof (val)); else if (err != PICL_SUCCESS) return (err); @@ -399,7 +406,8 @@ &compatible); if (err == PICL_SUCCESS) { (void) strlcat(name, "-", sizeof (name)); - (void) strlcat(name, compatible, sizeof (name)); + (void) strlcat(name, compatible, + sizeof (name)); free(compatible); } } else @@ -412,7 +420,7 @@ err = picl_get_propval_by_name(nodeh, OBP_PROP_MODEL, model, sizeof (model)); if (err == PICL_PROPNOTFOUND) - (void) strcpy(model, ""); + (void) strlcpy(model, "", sizeof (model)); else if (err != PICL_SUCCESS) return (err); (void) strlcpy(pci_card.model, model, sizeof (pci_card.model)); @@ -948,6 +956,7 @@ log_printf("\n"); return (PICL_WALK_CONTINUE); } + if ((loc = (char *)malloc(PICL_PROPNAMELEN_MAX*PARENT_NAMES)) == NULL) return (PICL_WALK_TERMINATE); for (i = 0; i < PARENT_NAMES; i++) @@ -973,11 +982,14 @@ &parenth, sizeof (parenth)); } loc[0] = '\0'; - if (--i > -1) - loc = strncat(loc, names[i], strlen(names[i])); + if (--i > -1) { + (void) strlcat(loc, names[i], + PICL_PROPNAMELEN_MAX * PARENT_NAMES); + } while (--i > -1) { - loc = strncat(loc, "/", 1); - loc = strncat(loc, names[i], strlen(names[i])); + (void) strlcat(loc, "/", PICL_PROPNAMELEN_MAX*PARENT_NAMES); + (void) strlcat(loc, names[i], + PICL_PROPNAMELEN_MAX * PARENT_NAMES); } log_printf("%-12s", loc); for (i = 0; i < PARENT_NAMES; i++) @@ -1097,11 +1109,14 @@ &parenth, sizeof (parenth)); } loc[0] = '\0'; - if (--i > -1) - loc = strncat(loc, names[i], strlen(names[i])); + if (--i > -1) { + (void) strlcat(loc, names[i], + PICL_PROPNAMELEN_MAX * PARENT_NAMES); + } while (--i > -1) { - loc = strncat(loc, "/", 1); - loc = strncat(loc, names[i], strlen(names[i])); + (void) strlcat(loc, "/", PICL_PROPNAMELEN_MAX * PARENT_NAMES); + (void) strlcat(loc, names[i], + PICL_PROPNAMELEN_MAX * PARENT_NAMES); } log_printf("%-12s", loc); for (i = 0; i < PARENT_NAMES; i++) @@ -1434,11 +1449,14 @@ &parenth, sizeof (parenth)); } loc[0] = '\0'; - if (--i > -1) - loc = strncat(loc, names[i], strlen(names[i])); + if (--i > -1) { + (void) strlcat(loc, names[i], + PICL_PROPNAMELEN_MAX * PARENT_NAMES); + } while (--i > -1) { - loc = strncat(loc, "/", 1); - loc = strncat(loc, names[i], strlen(names[i])); + (void) strlcat(loc, "/", PICL_PROPNAMELEN_MAX * PARENT_NAMES); + (void) strlcat(loc, names[i], + PICL_PROPNAMELEN_MAX * PARENT_NAMES); } log_printf("%-21s", loc); for (i = 0; i < PARENT_NAMES; i++)