Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'char-misc-4.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc driver fixes from Greg KH:
"Here are some char and misc driver fixes for reported issues.

One parport patch is reverted as it was incorrect, thanks to testing
by the 0-day bot"

* tag 'char-misc-4.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
parport: Revert "parport: fix memory leak"
mei: prevent unloading mei hw modules while the device is opened.
misc: mic: scif bug fix for vmalloc_to_page crash
parport: fix freeing freed memory
parport: fix memory leak
parport: fix error handling

+12 -16
+1 -1
drivers/misc/mei/main.c
··· 682 682 /* Fill in the data structures */ 683 683 devno = MKDEV(MAJOR(mei_devt), dev->minor); 684 684 cdev_init(&dev->cdev, &mei_fops); 685 - dev->cdev.owner = mei_fops.owner; 685 + dev->cdev.owner = parent->driver->owner; 686 686 687 687 /* Add the device */ 688 688 ret = cdev_add(&dev->cdev, devno, 1);
+5 -10
drivers/misc/mic/scif/scif_nodeqp.c
··· 357 357 } 358 358 359 359 static struct scatterlist * 360 - scif_p2p_setsg(void __iomem *va, int page_size, int page_cnt) 360 + scif_p2p_setsg(phys_addr_t pa, int page_size, int page_cnt) 361 361 { 362 362 struct scatterlist *sg; 363 363 struct page *page; ··· 368 368 return NULL; 369 369 sg_init_table(sg, page_cnt); 370 370 for (i = 0; i < page_cnt; i++) { 371 - page = vmalloc_to_page((void __force *)va); 372 - if (!page) 373 - goto p2p_sg_err; 371 + page = pfn_to_page(pa >> PAGE_SHIFT); 374 372 sg_set_page(&sg[i], page, page_size, 0); 375 - va += page_size; 373 + pa += page_size; 376 374 } 377 375 return sg; 378 - p2p_sg_err: 379 - kfree(sg); 380 - return NULL; 381 376 } 382 377 383 378 /* Init p2p mappings required to access peerdev from scifdev */ ··· 390 395 p2p = kzalloc(sizeof(*p2p), GFP_KERNEL); 391 396 if (!p2p) 392 397 return NULL; 393 - p2p->ppi_sg[SCIF_PPI_MMIO] = scif_p2p_setsg(psdev->mmio->va, 398 + p2p->ppi_sg[SCIF_PPI_MMIO] = scif_p2p_setsg(psdev->mmio->pa, 394 399 PAGE_SIZE, num_mmio_pages); 395 400 if (!p2p->ppi_sg[SCIF_PPI_MMIO]) 396 401 goto free_p2p; 397 402 p2p->sg_nentries[SCIF_PPI_MMIO] = num_mmio_pages; 398 403 sg_page_shift = get_order(min(psdev->aper->len, (u64)(1 << 30))); 399 404 num_aper_chunks = num_aper_pages >> (sg_page_shift - PAGE_SHIFT); 400 - p2p->ppi_sg[SCIF_PPI_APER] = scif_p2p_setsg(psdev->aper->va, 405 + p2p->ppi_sg[SCIF_PPI_APER] = scif_p2p_setsg(psdev->aper->pa, 401 406 1 << sg_page_shift, 402 407 num_aper_chunks); 403 408 p2p->sg_nentries[SCIF_PPI_APER] = num_aper_chunks;
+6 -5
drivers/parport/share.c
··· 891 891 par_dev->dev.release = free_pardevice; 892 892 par_dev->devmodel = true; 893 893 ret = device_register(&par_dev->dev); 894 - if (ret) 895 - goto err_put_dev; 894 + if (ret) { 895 + put_device(&par_dev->dev); 896 + goto err_put_port; 897 + } 896 898 897 899 /* Chain this onto the list */ 898 900 par_dev->prev = NULL; ··· 909 907 spin_unlock(&port->physport->pardevice_lock); 910 908 pr_debug("%s: cannot grant exclusive access for device %s\n", 911 909 port->name, name); 912 - goto err_put_dev; 910 + device_unregister(&par_dev->dev); 911 + goto err_put_port; 913 912 } 914 913 port->flags |= PARPORT_FLAG_EXCL; 915 914 } ··· 941 938 942 939 return par_dev; 943 940 944 - err_put_dev: 945 - put_device(&par_dev->dev); 946 941 err_free_devname: 947 942 kfree(devname); 948 943 err_free_par_dev: