Example #1
0
File: alloc.c Project: ariavie/bcm
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]);
}
Example #2
0
File: alloc.c Project: ariavie/bcm
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]);
}
Example #3
0
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);
}
Example #4
0
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
}