void sal_dma_free(void *addr) { uint32 *p = (uint32 *)addr; /* * Verify sentinels on free. If this assertion fails, it means that * memory corruption was detected. */ /* coverity[conditional (1): FALSE] */ /* coverity[conditional (2): FALSE] */ assert(!BAD_PTR(p)); /* Use macro to beautify assert message */ /* coverity[conditional (3): FALSE] */ /* coverity[conditional (4): FALSE] */ assert(!CORRUPT(p)); /* Use macro to beautify assert message */ #ifdef BROADCOM_DEBUG #ifdef INCLUDE_BCM_SAL_PROFILE SAL_DMA_ALLOC_RESOURCE_USAGE_DECR( _sal_dma_alloc_curr, (p[-2] * 4), ilock); #endif #endif /* BROADCOM_DEBUG */ MEMLOG_FREE("sal_dma_free", &p[-2]); p[-1] = 0; /* Detect redundant frees */ /* coverity[address_free : FALSE] */ free(&p[-2]); }
void sal_free(void *addr) { uint32 *p = (uint32 *)addr; EXT_DEBUG_FREE(addr); /* * Verify sentinels on free. If this assertion fails, it means that * memory corruption was detected. */ #ifdef SAL_FREE_NULL_IGNORE if (addr == NULL) { return; } #endif AGGR_DEBUG_FREE(addr); if (BAD_PTR(p) || CORRUPT(p)) { AGGR_DEBUG_PRINT_BAD_ADDR(addr); assert(!BAD_PTR(p)); /* Use macro to beautify assert message */ assert(!CORRUPT(p)); /* Use macro to beautify assert message */ } sal_free_calls += 1; sal_free_bytes += p[-2] * 4; #ifdef BROADCOM_DEBUG #ifdef INCLUDE_BCM_SAL_PROFILE SAL_ALLOC_RESOURCE_USAGE_DECR( _sal_alloc_curr, (p[-2] * 4), ilock); #endif #endif /* BROADCOM_DEBUG */ MEMLOG_FREE("sal_free", &p[-2]); p[-1] = 0; /* Detect redundant frees */ /* coverity[address_free : FALSE] */ free(&p[-2]); }
static nl_catd loadCat(__const char *catpath) { MCHeaderT header; MCCatT *cat; MCSetT *set; int32_t i; off_t nextSet; int saverr; int fd; if ((cat = (MCCatT *)malloc(sizeof(MCCatT))) == NULL) return (NLERR); if ((fd = open(catpath, O_RDONLY | O_CLOEXEC)) == -1) { saverr = errno; free(cat); errno = saverr; return (NLERR); } if ((cat->fp = fdopen(fd, "r")) == NULL) { saverr = errno; close(fd); free(cat); errno = saverr; return (NLERR); } if (fread(&header, sizeof(header), 1, cat->fp) != 1 || strncmp(header.magic, MCMagic, MCMagicLen) != 0) CORRUPT(); if (ntohl(header.majorVer) != MCMajorVer) { (void)fclose(cat->fp); free(cat); if (OSSwapInt32(ntohl(header.majorVer)) == MCMajorVer) { (void)fprintf(stderr, "%s: %s is the wrong byte ordering.\n", _errowner, catpath); } else { (void)fprintf(stderr, "%s: %s is version %d, we need %d.\n", _errowner, catpath, (int)ntohl(header.majorVer), MCMajorVer); } NLRETERR(EFTYPE); } if (ntohl(header.numSets) <= 0) { (void)fclose(cat->fp); free(cat); (void)fprintf(stderr, "%s: %s has %d sets!\n", _errowner, catpath, (int)ntohl(header.numSets)); NLRETERR(EFTYPE); } cat->numSets = ntohl(header.numSets); if ((cat->sets = (MCSetT *)malloc(sizeof(MCSetT) * cat->numSets)) == NULL) NOSPACE(); nextSet = ntohll(header.firstSet); for (i = 0; i < cat->numSets; ++i) { if (fseeko(cat->fp, nextSet, SEEK_SET) == -1) { __nls_free_resources(cat, i); CORRUPT(); } /* read in the set header */ set = cat->sets + i; if (fread(set, sizeof(*set), 1, cat->fp) != 1) { __nls_free_resources(cat, i); CORRUPT(); } /* if it's invalid, skip over it (and backup 'i') */ if (set->invalid) { --i; nextSet = ntohll(set->nextSet); continue; } set->invalid = TRUE; nextSet = ntohll(set->nextSet); } return ((nl_catd) cat); }
void MCReadCat(int fd) { fd = 0; #if 0 MCHeaderT mcHead; MCMsgT mcMsg; MCSetT mcSet; msgT *msg; setT *set; int i; char *data; /* XXX init sethead? */ if (read(fd, &mcHead, sizeof(mcHead)) != sizeof(mcHead)) CORRUPT(); if (strncmp(mcHead.magic, MCMagic, MCMagicLen) != 0) CORRUPT(); if (mcHead.majorVer != MCMajorVer) error("unrecognized catalog version"); if ((mcHead.flags & MCGetByteOrder()) == 0) error("wrong byte order"); if (lseek(fd, mcHead.firstSet, SEEK_SET) == -1) CORRUPT(); for (;;) { if (read(fd, &mcSet, sizeof(mcSet)) != sizeof(mcSet)) CORRUPT(); if (mcSet.invalid) continue; set = xmalloc(sizeof(setT)); memset(set, '\0', sizeof(*set)); if (cat->first) { cat->last->next = set; set->prev = cat->last; cat->last = set; } else cat->first = cat->last = set; set->setId = mcSet.setId; /* Get the data */ if (mcSet.dataLen) { data = xmalloc(mcSet.dataLen); if (lseek(fd, mcSet.data.off, SEEK_SET) == -1) CORRUPT(); if (read(fd, data, mcSet.dataLen) != mcSet.dataLen) CORRUPT(); if (lseek(fd, mcSet.u.firstMsg, SEEK_SET) == -1) CORRUPT(); for (i = 0; i < mcSet.numMsgs; ++i) { if (read(fd, &mcMsg, sizeof(mcMsg)) != sizeof(mcMsg)) CORRUPT(); if (mcMsg.invalid) { --i; continue; } msg = xmalloc(sizeof(msgT)); memset(msg, '\0', sizeof(*msg)); if (set->first) { set->last->next = msg; msg->prev = set->last; set->last = msg; } else set->first = set->last = msg; msg->msgId = mcMsg.msgId; msg->str = xstrdup((char *) (data + mcMsg.msg.off)); } free(data); } if (!mcSet.nextSet) break; if (lseek(fd, mcSet.nextSet, SEEK_SET) == -1) CORRUPT(); } #endif }