Skip to content

Commit e433b65

Browse files
committed
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
2 parents 763e326 + 4e5a74f commit e433b65

File tree

3 files changed

+12
-16
lines changed

3 files changed

+12
-16
lines changed

drivers/misc/mei/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ int mei_register(struct mei_device *dev, struct device *parent)
682682
/* Fill in the data structures */
683683
devno = MKDEV(MAJOR(mei_devt), dev->minor);
684684
cdev_init(&dev->cdev, &mei_fops);
685-
dev->cdev.owner = mei_fops.owner;
685+
dev->cdev.owner = parent->driver->owner;
686686

687687
/* Add the device */
688688
ret = cdev_add(&dev->cdev, devno, 1);

drivers/misc/mic/scif/scif_nodeqp.c

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ static void scif_p2p_freesg(struct scatterlist *sg)
357357
}
358358

359359
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)
361361
{
362362
struct scatterlist *sg;
363363
struct page *page;
@@ -368,16 +368,11 @@ scif_p2p_setsg(void __iomem *va, int page_size, int page_cnt)
368368
return NULL;
369369
sg_init_table(sg, page_cnt);
370370
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);
374372
sg_set_page(&sg[i], page, page_size, 0);
375-
va += page_size;
373+
pa += page_size;
376374
}
377375
return sg;
378-
p2p_sg_err:
379-
kfree(sg);
380-
return NULL;
381376
}
382377

383378
/* Init p2p mappings required to access peerdev from scifdev */
@@ -395,14 +390,14 @@ scif_init_p2p_info(struct scif_dev *scifdev, struct scif_dev *peerdev)
395390
p2p = kzalloc(sizeof(*p2p), GFP_KERNEL);
396391
if (!p2p)
397392
return NULL;
398-
p2p->ppi_sg[SCIF_PPI_MMIO] = scif_p2p_setsg(psdev->mmio->va,
393+
p2p->ppi_sg[SCIF_PPI_MMIO] = scif_p2p_setsg(psdev->mmio->pa,
399394
PAGE_SIZE, num_mmio_pages);
400395
if (!p2p->ppi_sg[SCIF_PPI_MMIO])
401396
goto free_p2p;
402397
p2p->sg_nentries[SCIF_PPI_MMIO] = num_mmio_pages;
403398
sg_page_shift = get_order(min(psdev->aper->len, (u64)(1 << 30)));
404399
num_aper_chunks = num_aper_pages >> (sg_page_shift - PAGE_SHIFT);
405-
p2p->ppi_sg[SCIF_PPI_APER] = scif_p2p_setsg(psdev->aper->va,
400+
p2p->ppi_sg[SCIF_PPI_APER] = scif_p2p_setsg(psdev->aper->pa,
406401
1 << sg_page_shift,
407402
num_aper_chunks);
408403
p2p->sg_nentries[SCIF_PPI_APER] = num_aper_chunks;

drivers/parport/share.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -891,8 +891,10 @@ parport_register_dev_model(struct parport *port, const char *name,
891891
par_dev->dev.release = free_pardevice;
892892
par_dev->devmodel = true;
893893
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+
}
896898

897899
/* Chain this onto the list */
898900
par_dev->prev = NULL;
@@ -907,7 +909,8 @@ parport_register_dev_model(struct parport *port, const char *name,
907909
spin_unlock(&port->physport->pardevice_lock);
908910
pr_debug("%s: cannot grant exclusive access for device %s\n",
909911
port->name, name);
910-
goto err_put_dev;
912+
device_unregister(&par_dev->dev);
913+
goto err_put_port;
911914
}
912915
port->flags |= PARPORT_FLAG_EXCL;
913916
}
@@ -938,8 +941,6 @@ parport_register_dev_model(struct parport *port, const char *name,
938941

939942
return par_dev;
940943

941-
err_put_dev:
942-
put_device(&par_dev->dev);
943944
err_free_devname:
944945
kfree(devname);
945946
err_free_par_dev:

0 commit comments

Comments
 (0)