]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
soc: qcom: Add check devm_kasprintf() returned value
authorCharles Han <hanchunchao@inspur.com>
Sun, 29 Sep 2024 07:23:49 +0000 (15:23 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 18:47:41 +0000 (19:47 +0100)
[ Upstream commit e694d2b5c58ba2d1e995d068707c8d966e7f5f2a ]

devm_kasprintf() can return a NULL pointer on failure but this
returned value in qcom_socinfo_probe() is not checked.

Signed-off-by: Charles Han <hanchunchao@inspur.com>
Link: https://lore.kernel.org/r/20240929072349.202520-1-hanchunchao@inspur.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/soc/qcom/socinfo.c

index 60c82dcaa8d1d50d0e5b5469a76f93350148f9c8..7bb3543e42e59620159673ebf331134e5780fb38 100644 (file)
@@ -507,10 +507,16 @@ static int qcom_socinfo_probe(struct platform_device *pdev)
        qs->attr.revision = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%u.%u",
                                           SOCINFO_MAJOR(le32_to_cpu(info->ver)),
                                           SOCINFO_MINOR(le32_to_cpu(info->ver)));
-       if (offsetof(struct socinfo, serial_num) <= item_size)
+       if (!qs->attr.soc_id || qs->attr.revision)
+               return -ENOMEM;
+
+       if (offsetof(struct socinfo, serial_num) <= item_size) {
                qs->attr.serial_number = devm_kasprintf(&pdev->dev, GFP_KERNEL,
                                                        "%u",
                                                        le32_to_cpu(info->serial_num));
+               if (!qs->attr.serial_number)
+                       return -ENOMEM;
+       }
 
        qs->soc_dev = soc_device_register(&qs->attr);
        if (IS_ERR(qs->soc_dev))