rpmsg: glink: Fix rpmsg_register_device err handling
authorChris Lew <clew@codeaurora.org>
Fri, 4 Oct 2019 22:27:00 +0000 (15:27 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Dec 2019 09:47:46 +0000 (10:47 +0100)
commit f7e714988edaffe6ac578318e99501149b067ba0 upstream.

The device release function is set before registering with rpmsg. If
rpmsg registration fails, the framework will call device_put(), which
invokes the release function. The channel create logic does not need to
free rpdev if rpmsg_register_device() fails and release is called.

Fixes: b4f8e52b89f6 ("rpmsg: Introduce Qualcomm RPM glink driver")
Cc: stable@vger.kernel.org
Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Chris Lew <clew@codeaurora.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/rpmsg/qcom_glink_native.c

index aef24a4c9826b3a0c17b5d5ce5a687222f6aac36..306b3cc6ab13e8abcf3be396762685272788d6d9 100644 (file)
@@ -1400,15 +1400,13 @@ static int qcom_glink_rx_open(struct qcom_glink *glink, unsigned int rcid,
 
                ret = rpmsg_register_device(rpdev);
                if (ret)
-                       goto free_rpdev;
+                       goto rcid_remove;
 
                channel->rpdev = rpdev;
        }
 
        return 0;
 
-free_rpdev:
-       kfree(rpdev);
 rcid_remove:
        spin_lock_irqsave(&glink->idr_lock, flags);
        idr_remove(&glink->rcids, channel->rcid);