Showing error 800

User: Jiri Slaby
Error type: Memory Leak
Error type description: There the code omits to free some allocated memory
File location: drivers/media/video/vivi.c
Line in file: 1058
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:26:27 UTC


Source:

1028{
1029        int minor = iminor(inode);
1030        struct vivi_dev *dev;
1031        struct vivi_fh *fh = NULL;
1032        int i;
1033        int retval = 0;
1034
1035        printk(KERN_DEBUG "vivi: open called (minor=%d)\n", minor);
1036
1037        lock_kernel();
1038        list_for_each_entry(dev, &vivi_devlist, vivi_devlist)
1039                if (dev->vfd->minor == minor)
1040                        goto found;
1041        unlock_kernel();
1042        return -ENODEV;
1043
1044found:
1045        mutex_lock(&dev->mutex);
1046        dev->users++;
1047
1048        if (dev->users > 1) {
1049                dev->users--;
1050                retval = -EBUSY;
1051                goto unlock;
1052        }
1053
1054        dprintk(dev, 1, "open minor=%d type=%s users=%d\n", minor,
1055                v4l2_type_names[V4L2_BUF_TYPE_VIDEO_CAPTURE], dev->users);
1056
1057        /* allocate + initialize per filehandle data */
1058        fh = kzalloc(sizeof(*fh), GFP_KERNEL);
1059        if (NULL == fh) {
1060                dev->users--;
1061                retval = -ENOMEM;
1062                goto unlock;
1063        }
1064unlock:
1065        mutex_unlock(&dev->mutex);
1066        if (retval) {
1067                unlock_kernel();
1068                return retval;
Show full sources