Messages in this thread | | | From | Dawson Engler <> | Subject | [CHECKER]: malloc/free errors part III | Date | Fri, 11 Aug 2000 17:55:09 -0700 (PDT) |
| |
Hi,
here's the third vetted installment of malloc/free errors. I've looked over all of them, but the not-freeing-on-error cases were sometimes a little subtle so there may still be a few false positives.
Dawson ------------------------------------------------------------------------ /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1115:usb_parse_configuration: ERROR: did not free config on error path
Not sure: looks like you'll just overwrite it on the second pass:
config->interface = (struct usb_interface *) kmalloc(config->bNumInterfaces * sizeof(struct usb_interface), GFP_KERNEL);
------------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/i2o/i2o_config.c:502:ioctl_html: ERROR: did not free query on error path
if(kcmd.qlen) /* Check for post data */ { query = kmalloc(kcmd.qlen, GFP_KERNEL); if(!query) { i2o_unlock_controller(c); return -ENOMEM; } if(copy_from_user(query, kcmd.qbuf, kcmd.qlen)) { i2o_unlock_controller(c); printk(KERN_INFO "i2o_config: could not get query\n"); kfree(query); return -EFAULT; } }
res = kmalloc(65536, GFP_KERNEL); if(!res) {
i2o_unlock_controller(c); lost query ----> return -ENOMEM; }
------------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/i2o/i2o_core.c:1532:i2o_reset_controller: ERROR: did not free status on error path
status=(void *)kmalloc(4, GFP_KERNEL); if(status==NULL) { printk(KERN_ERR "IOP reset failed - no free memory.\n"); return -ENOMEM; }
.... { if((jiffies-time) >= 30*HZ) { printk(KERN_ERR "%s: Timeout waiting for IOP reset.\n", c->name); status lost ---> return -ETIMEDOUT; }
-------------------------------------------------------------------------
/u2/engler/ic/linux-2.3.99/drivers/ide/ide-probe.c:626:init_irq: ERROR: memset of unchecked var 'hwgroup'!
hwgroup = kmalloc(sizeof(ide_hwgroup_t), GFP_KERNEL); memset(hwgroup, 0, sizeof(ide_hwgroup_t));
------------------------------------------------------------------------- CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/ide/ide-probe.c:725:init_gendisk: ERROR: memset of unchecked var 'gd'! CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/ide/ide-probe.c:728:init_gendisk: ERROR: Unchecked use of malloc'd var 'bs' CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/ide/ide-probe.c:729:init_gendisk: ERROR: Unchecked use of malloc'd var 'max_sect' CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/ide/ide-probe.c:730:init_gendisk: ERROR: Unchecked use of malloc'd var 'max_ra' CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/ide/ide-probe.c:744:init_gendisk: ERROR: Unchecked use of malloc'd var 'gd'
minors = units * (1<<PARTN_BITS); gd = kmalloc (sizeof(struct gendisk), GFP_KERNEL); gd->sizes = kmalloc (minors * sizeof(int), GFP_KERNEL); gd->part = kmalloc (minors * sizeof(struct hd_struct), GFP_KERNEL); bs = kmalloc (minors*sizeof(int), GFP_KERNEL); max_sect = kmalloc (minors*sizeof(int), GFP_KERNEL); max_ra = kmalloc (minors*sizeof(int), GFP_KERNEL);
memset(gd->part, 0, minors * sizeof(struct hd_struct));
-------------------------------------------------------------------------
/u2/engler/ic/linux-2.3.99/drivers/scsi/scsi.c:1428:scsi_build_commandblocks: ERROR: memset of unchecked var 'SCpnt'!
SCpnt = (Scsi_Cmnd *) kmalloc(sizeof(Scsi_Cmnd), GFP_ATOMIC | (host->unchecked_isa_dma ? GFP_DMA : 0)); Uh. Gotta check *before* use ;-) ---> memset(SCpnt, 0, sizeof(Scsi_Cmnd)); if (NULL == SCpnt) break; /* If not, the next line will oops ... */ memset(&SCpnt->eh_timeout, 0, sizeof(SCpnt->eh_timeout));
-------------------------------------------------------------------------
/u2/engler/ic/linux-2.3.99/drivers/scsi/scsi.c:2715:scsi_get_host_dev: ERROR: memset of unchecked var 'SDpnt'!
SDpnt = (Scsi_Device *) kmalloc(sizeof(Scsi_Device), GFP_ATOMIC); memset(SDpnt, 0, sizeof(Scsi_Device));
------------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/scsi/eata_dma.c:917:get_board_data: ERROR: memset of unchecked var 'cp'! /u2/engler/ic/linux-2.3.99/drivers/scsi/eata_dma.c:918:get_board_data: ERROR: memset of unchecked var 'sp'!
cp = (struct eata_ccb *) kmalloc(sizeof(struct eata_ccb), GFP_ATOMIC | GFP_DMA); sp = (struct eata_sp *) kmalloc(sizeof(struct eata_sp), GFP_ATOMIC | GFP_DMA); buff = dma_scratch;
memset(cp, 0, sizeof(struct eata_ccb)); memset(sp, 0, sizeof(struct eata_sp));
------------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/scsi/hosts.c:740:scsi_register: ERROR: memset of unchecked var 'retval'!
retval = (struct Scsi_Host *)kmalloc(sizeof(struct Scsi_Host) + j, (tpnt->unchecked_isa_dma && j ? GFP_DMA : 0) | GFP_ATOMIC); memset(retval, 0, sizeof(struct Scsi_Host) + j);
/u2/engler/ic/linux-2.3.99/drivers/scsi/hosts.c:766:scsi_register: ERROR: Unchecked use of malloc'd var 'shn' /u2/engler/ic/linux-2.3.99/drivers/scsi/hosts.c:767:scsi_register: ERROR: Unchecked use of malloc'd var 'shn' /u2/engler/ic/linux-2.3.99/drivers/scsi/hosts.c:768:scsi_register: ERROR: Unchecked use of malloc'd var 'shn'
shn->name = kmalloc(len+1, GFP_ATOMIC); if (tpnt->proc_dir) strncpy(shn->name, tpnt->proc_dir->name, len);
-------------------------------------------------------------------------
/u2/engler/ic/linux-2.3.99/drivers/scsi/ips.c:3237:ips_allocatescbs: ERROR: memset of unchecked var 'ha'!
ha->scbs = (ips_scb_t *) kmalloc(ha->max_cmds * sizeof(ips_scb_t), GFP_KERNEL|GFP_DMA);
memset(ha->scbs, 0, ha->max_cmds * sizeof(ips_scb_t)); --------------------------------------------------------------- CONFIRM [CHECK]
/u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1024:sd_init: ERROR: memset of unchecked var 'rscsi_disks'!
rscsi_disks = (Scsi_Disk *) kmalloc(sd_template.dev_max * sizeof(Scsi_Disk), GFP_ATOMIC); memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk));
CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1028:sd_init: ERROR: memset of unchecked var 'sd_sizes'! /* for every (necessary) major: */ sd_sizes = (int *) kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC); memset(sd_sizes, 0, (sd_template.dev_max << 4) * sizeof(int));
sd_blocksizes = (int *) kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC); sd_hardsizes = (int *) kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1039:sd_init: ERROR: Unchecked use of malloc'd var 'sd_blocksizes' for (i = 0; i < sd_template.dev_max << 4; i++) { sd_blocksizes[i] = 1024; sd_hardsizes[i] = 512; }
CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1045:sd_init: ERROR: memset of unchecked var 'sd'!
sd = (struct hd_struct *) kmalloc((sd_template.dev_max << 4) * sizeof(struct hd_struct), GFP_ATOMIC); memset(sd, 0, (sd_template.dev_max << 4) * sizeof(struct hd_struct));
CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1055:sd_init: ERROR: memset of unchecked var 'sd_gendisks'! CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1059:sd_init: ERROR: memset of unchecked var 'sd_gendisks'! CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sd.c:1040:sd_init: ERROR: Unchecked use of malloc'd var 'sd_hardsizes'
------------------------------------------------------------------------------
CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sr.c:712:sr_init: ERROR: memset of unchecked var 'scsi_CDs'! CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sr.c:715:sr_init: ERROR: memset of unchecked var 'sr_sizes'! CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sr.c:730:sr_init: ERROR: Unchecked use of malloc'd var 'sr_blocksizes' CONFIRM [CHECK] /u2/engler/ic/linux-2.3.99/drivers/scsi/sr.c:727:sr_init: ERROR: Unchecked use of malloc'd var 'sr_blocksizes'
scsi_CDs = (Scsi_CD *) kmalloc(sr_template.dev_max * sizeof(Scsi_CD), GFP_ATOMIC); memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD)); sr_sizes = (int *) kmalloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC); memset(sr_sizes, 0, sr_template.dev_max * sizeof(int));
sr_blocksizes = (int *) kmalloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC); sr_hardsizes = (int *) kmalloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC);
--------------------------------------------------------------------------- CONFIRM [FREE] /u2/engler/ic/linux-2.3.99/drivers/cdrom/mcdx.c:1516:mcdx_readtoc: ERROR: did not free stuffp on error path CONFIRM [FREE] /u2/engler/ic/linux-2.3.99/drivers/cdrom/mcdx.c:1492:mcdx_readtoc: ERROR: did not free stuffp on error path
stuffp->toc = kmalloc(size, GFP_KERNEL); if (!stuffp->toc) { xwarn("Cannot malloc %d bytes for toc\n", size); mcdx_setdrivemode(stuffp, DATA, 1); shouldn't this be ENOMEM? ----> return -EIO; } }
--------------------------------------------------------------------------- CONFIRM [CHECK]
/u2/engler/ic/linux-2.3.99/drivers/isdn/hisax/callc.c:1177:init_PStack: ERROR: Unchecked use of malloc'd var 'stp'
*stp = kmalloc(sizeof(struct PStack), GFP_ATOMIC); (*stp)->next = NULL;
--------------------------------------------------------------------------- CONFIRM [CHECK]
/u2/engler/ic/linux-2.3.99/drivers/isdn/hisax/fsm.c:64:FsmNew: ERROR: memset of unchecked var 'fsm'!
fsm->jumpmatrix = (FSMFNPTR *) kmalloc(sizeof (FSMFNPTR) * fsm->state_count * fsm->event_count, GFP_KERNEL); memset(fsm->jumpmatrix, 0, sizeof (FSMFNPTR) * fsm->state_count * fsm->e
--------------------------------------------------------------------------- CONFIRM [FREE]
/u2/engler/ic/linux-2.3.99/drivers/isdn/icn/icn.c:1066:icn_loadboot: ERROR: did not free codebuf on error path
Got it right on most paths, missed this one:
if (!(codebuf = kmalloc(ICN_CODE_STAGE1, GFP_KERNEL))) { printk(KERN_WARNING "icn: Could not allocate code buffer\n"); return -ENOMEM; }
...
if (!dev.mvalid) { if (check_shmem((ulong) dev.shmem, 0x4000)) { printk(KERN_WARNING "icn: memory at 0x%08lx in use.\n", (ulong) dev.shmem); restore_flags(flags); code buf still allocated. ---> return -EBUSY; }
--------------------------------------------------------------------------- Not sure: is this possibly getting lost? Or are the two if statemnets exclusive?
/u2/engler/ic/linux-2.3.99/drivers/isdn/pcbit/capi.c:458:capi_decode_conn_ind: ERROR: did not free info on error path
len = skb->data[0];
if (len > 0) { int count = 1;
#ifdef DEBUG printk(KERN_DEBUG "CPN: Octect 3 %02x\n", skb->data[1]); #endif if ((skb->data[1] & 0x80) == 0) count = 2;
------------> if (!(info->data.setup.CallingPN = kmalloc(len - count + 1, GFP_ATOMIC))) return -1;
...
skb_pull(skb, len + 1);
/* Calling Party Subaddress */ skb_pull(skb, skb->data[0] + 1); /* Called Party Number */
len = skb->data[0]; if (len > 0) { int count = 1; if ((skb->data[1] & 0x80) == 0) count = 2; -------> if (!(info->data.setup.CalledPN = kmalloc(len - count + 1, GFP_ATOMIC))) return -1; memcpy(info->data.setup.CalledPN, skb->data + count + 1, len - count); info->data.setup.CalledPN[len - count] = 0;
} else {
----------------------------------------------------------------- CONFIRM [FREE] /u2/engler/ic/linux-2.3.99/drivers/isdn/pcbit/drv.c:208:pcbit_init_dev: ERROR: did not free dev_if on error path
It looks like it's not freeing dev_if on this path (it assigns it to dev->dev_if)
if (!register_isdn(dev_if)) { free_irq(irq, dev); kfree(dev->b1); kfree(dev->b2); kfree(dev); CHECKER BUG: why is this not getting caught: dereffing dev after freeing it! ---> iounmap((unsigned char*)dev->sh_mem); release_mem_region(dev->ph_mem, 4096); dev_pcbit[board] = NULL; return -EIO; }
----------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/isdn/eicon/eicon_isa.c:421:eicon_isa_load: ERROR: did not free code on error path
tmp = readb(&boot->msize); if (tmp != 8 && tmp != 16 && tmp != 24 && tmp != 32 && tmp != 48 && tmp != 60) { printk(KERN_WARNING "eicon_isa_load: invalid memsize\n"); eicon_isa_release_shmem(card); return -EIO; }
eicon_isa_printpar(card); --------------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/atm/iphase.c:1639:rx_init: ERROR: did not free dle_addr on error path /u2/engler/ic/linux-2.3.99/drivers/atm/iphase.c:1988:tx_init: ERROR: did not free dle_addr on error path /u2/engler/ic/linux-2.3.99/drivers/atm/iphase.c:1979:tx_init: ERROR: did not free dle_addr on error path
Shouldn't this bail with an error if it cannot allocate? It's just going and dereffing it.
/* allocate 8k bytes */ dle_addr = (u32*)kmalloc(2*sizeof(struct dle)*DLE_ENTRIES, GFP_KERNEL); if (!dle_addr) { printk(KERN_ERR DEV_LABEL "can't allocate DLEs\n"); } /* find 4k byte boundary within the 8k allocated */ dle_addr = (u32*)( ((u32)dle_addr+(4096-1)) & ~(4096-1) );
--------------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/drivers/atm/iphase.c:2129:tx_init: ERROR: Unchecked use of malloc'd var 'iadev'
iadev->testTable[i] = (struct testTable_t *) kmalloc(sizeof(struct testTable_t), GFP_KERNEL); iadev->testTable[i]->lastTime = 0;
------------------------------------------------------------------------
There are a boatload of errors caused by the bogus code in CODA_ALLOC where it allocates, checks for null, and then memsets even if null.
Eg: CONFIRM [CODA] /u2/engler/ic/linux-2.3.99/fs/coda/cache.c:89:coda_cache_create: ERROR: memset of unchecked var 'cc'!
----------- CONFIRM [CODA] /u2/engler/ic/linux-2.3.99/fs/coda/dir.c:681:coda_venus_readdir: ERROR: memset of unchecked var 'buff'!
CONFIRM [CODA] /u2/engler/ic/linux-2.3.99/fs/coda/psdev.c:137:coda_psdev_write: ERROR: memset of unchecked var 'dcbuf'!
CONFIRM [CODA] /u2/engler/ic/linux-2.3.99/fs/coda/upcall.c:80:venus_rootfid: ERROR: Unchecked use of malloc'd var 'inp' /u2/engler/ic/linux-2.3.99/fs/coda/upcall.c:80:venus_rootfid: ERROR: Unchecked use of malloc'd var 'inp' /u2/engler/ic/linux-2.3.99/fs/coda/upcall.c:80:venus_rootfid: ERROR: memset of unchecked var 'inp'!
-------------------------------------------------------------------------
Actually, it loses the storage even on success!
/u2/engler/ic/linux-2.3.99/net/atm/common.c:560:atm_ioctl: ERROR: did not free tmp_buf on error path
if (size > len) return -E2BIG; tmp_buf = kmalloc(size,GFP_KERNEL); if (!tmp_buf) return -ENOMEM; for (dev = atm_devs; dev; dev = dev->next) *tmp_buf++ = dev->number; if (copy_to_user(buf,(char *) tmp_buf-size,size)) return -EFAULT; return put_user(size, &((struct atm_iobuf *) arg)->length) ? -EFAULT : 0;
-------------------------------------------------------------------
/u2/engler/ic/linux-2.3.99/net/atm/lec.c:280:lec_send_packet: ERROR: Unchecked use of malloc'd var 'nb'
nb=(unsigned char*)kmalloc(64, GFP_ATOMIC); memcpy(nb,skb->data,skb->len); skb->head = skb->data = nb; skb->tail = nb+62; skb->end = nb+64;
----------------------------------------------------------------------- /u2/engler/ic/linux-2.3.99/net/atm/mpc.c:169:atm_mpoa_add_qos: ERROR: allocated 84 bytes for 'entry' need 92
Typo in the size field.
------------------------------------------------------------------- UNSURE, but it looks like all these interface allocations will be lost. If it fails, they just get overwritten.
/u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path
/u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1023:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1057:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1046:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1023:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1057:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1046:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1023:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1057:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1046:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1023:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1057:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1046:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1023:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1057:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1046:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1057:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1046:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1023:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:1038:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:990:usb_parse_interface: ERROR: did not free interface on error path /u2/engler/ic/linux-2.3.99/drivers/usb/usb.c:956:usb_parse_interface: ERROR: did not free interface on error path
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |