Commit 68e6134b authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'rpmsg-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux

Pull rpmsg updates from Bjorn Andersson:
 "This corrects the check for irq_of_parse_and_map() failures in the
  Qualcomm SMD driver and fixes unregistration and a couple of double
  free in the virtio rpmsg driver"

* tag 'rpmsg-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux:
  rpmsg: qcom_smd: Fix returning 0 if irq_of_parse_and_map() fails
  rpmsg: virtio: Fix the unregistration of the device rpmsg_ctrl
  rpmsg: virtio: Fix possible double free in rpmsg_virtio_add_ctrl_dev()
  rpmsg: virtio: Fix possible double free in rpmsg_probe()
  rpmsg: qcom_smd: Fix irq_of_parse_and_map() return value
parents f634b63d 59d6f72f
...@@ -1407,9 +1407,9 @@ static int qcom_smd_parse_edge(struct device *dev, ...@@ -1407,9 +1407,9 @@ static int qcom_smd_parse_edge(struct device *dev,
edge->name = node->name; edge->name = node->name;
irq = irq_of_parse_and_map(node, 0); irq = irq_of_parse_and_map(node, 0);
if (irq < 0) { if (!irq) {
dev_err(dev, "required smd interrupt missing\n"); dev_err(dev, "required smd interrupt missing\n");
ret = irq; ret = -EINVAL;
goto put_node; goto put_node;
} }
......
...@@ -851,7 +851,7 @@ static struct rpmsg_device *rpmsg_virtio_add_ctrl_dev(struct virtio_device *vdev ...@@ -851,7 +851,7 @@ static struct rpmsg_device *rpmsg_virtio_add_ctrl_dev(struct virtio_device *vdev
err = rpmsg_ctrldev_register_device(rpdev_ctrl); err = rpmsg_ctrldev_register_device(rpdev_ctrl);
if (err) { if (err) {
kfree(vch); /* vch will be free in virtio_rpmsg_release_device() */
return ERR_PTR(err); return ERR_PTR(err);
} }
...@@ -862,7 +862,7 @@ static void rpmsg_virtio_del_ctrl_dev(struct rpmsg_device *rpdev_ctrl) ...@@ -862,7 +862,7 @@ static void rpmsg_virtio_del_ctrl_dev(struct rpmsg_device *rpdev_ctrl)
{ {
if (!rpdev_ctrl) if (!rpdev_ctrl)
return; return;
kfree(to_virtio_rpmsg_channel(rpdev_ctrl)); device_unregister(&rpdev_ctrl->dev);
} }
static int rpmsg_probe(struct virtio_device *vdev) static int rpmsg_probe(struct virtio_device *vdev)
...@@ -973,7 +973,8 @@ static int rpmsg_probe(struct virtio_device *vdev) ...@@ -973,7 +973,8 @@ static int rpmsg_probe(struct virtio_device *vdev)
err = rpmsg_ns_register_device(rpdev_ns); err = rpmsg_ns_register_device(rpdev_ns);
if (err) if (err)
goto free_vch; /* vch will be free in virtio_rpmsg_release_device() */
goto free_ctrldev;
} }
/* /*
...@@ -997,8 +998,6 @@ static int rpmsg_probe(struct virtio_device *vdev) ...@@ -997,8 +998,6 @@ static int rpmsg_probe(struct virtio_device *vdev)
return 0; return 0;
free_vch:
kfree(vch);
free_ctrldev: free_ctrldev:
rpmsg_virtio_del_ctrl_dev(rpdev_ctrl); rpmsg_virtio_del_ctrl_dev(rpdev_ctrl);
free_coherent: free_coherent:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment