2024-01-16 03:28:09

by Kunwu Chan

[permalink] [raw]
Subject: [PATCH] drm/msm/adreno: Add a null pointer check to the zap_shader_load_mdt

kasprintf() returns a pointer to dynamically allocated memory
which can be NULL upon failure. Ensure the allocation was successful
by checking the pointer validity.

Signed-off-by: Kunwu Chan <[email protected]>
---
drivers/gpu/drm/msm/adreno/adreno_gpu.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index 074fb498706f..7e79ead4fe00 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -144,6 +144,10 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
char *newname;

newname = kasprintf(GFP_KERNEL, "qcom/%s", fwname);
+ if (!newname) {
+ ret = -ENOMEM;
+ goto out;
+ }

ret = qcom_mdt_load(dev, fw, newname, pasid,
mem_region, mem_phys, mem_size, NULL);
--
2.39.2



2024-01-17 18:51:18

by Markus Elfring

[permalink] [raw]
Subject: Re: [PATCH] drm/msm/adreno: Add a null pointer check in zap_shader_load_mdt()

> kasprintf() returns a pointer to dynamically allocated memory
> which can be NULL upon failure. Ensure the allocation was successful
> by checking the pointer validity.

> +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> @@ -144,6 +144,10 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
> char *newname;
>
> newname = kasprintf(GFP_KERNEL, "qcom/%s", fwname);
> + if (!newname) {
> + ret = -ENOMEM;
> + goto out;
> + }


How do you think about to avoid the repetition of the pointer check
for the variable “mem_region”?
Can the usage of other labels become more appropriate?

Regards,
Markus

2024-01-18 02:17:31

by Kunwu Chan

[permalink] [raw]
Subject: Re: [PATCH] drm/msm/adreno: Add a null pointer check in zap_shader_load_mdt()

On 2024/1/18 02:50, Markus Elfring wrote:
>> kasprintf() returns a pointer to dynamically allocated memory
>> which can be NULL upon failure. Ensure the allocation was successful
>> by checking the pointer validity.
> …
>> +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
>> @@ -144,6 +144,10 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
>> char *newname;
>>
>> newname = kasprintf(GFP_KERNEL, "qcom/%s", fwname);
>> + if (!newname) {
>> + ret = -ENOMEM;
>> + goto out;
>> + }
> …
>
> How do you think about to avoid the repetition of the pointer check
> for the variable “mem_region”?
"mem_region"? Is this a clerical error, do you mean 'newname'?

No check found in __qcom_mdt_load for 'newname'.
'newname' is used for printing in '__qcom_mdt_load' in some cases, which
is a bit dangerous.
So it's necessary check it before using it.

> Can the usage of other labels become more appropriate?
>
> Regards,
> Markus
--
Thanks,
Kunwu


2024-01-18 08:13:50

by Markus Elfring

[permalink] [raw]
Subject: Re: [PATCH] drm/msm/adreno: Add a null pointer check in zap_shader_load_mdt()

>>> kasprintf() returns a pointer to dynamically allocated memory
>>> which can be NULL upon failure. Ensure the allocation was successful
>>> by checking the pointer validity.
>> …
>>> +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
>>> @@ -144,6 +144,10 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,
>>>           char *newname;
>>>
>>>           newname = kasprintf(GFP_KERNEL, "qcom/%s", fwname);
>>> +        if (!newname) {
>>> +            ret = -ENOMEM;
>>> +            goto out;
>>> +        }
>> …
>>
>> How do you think about to avoid the repetition of the pointer check
>> for the variable “mem_region”?
> "mem_region"? Is this a clerical error, do you mean 'newname'?

Please take another look at implementation details:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/msm/adreno/adreno_gpu.c?h=v6.7#n124



>> Can the usage of other labels become more appropriate?

I propose to reconsider also the influence of the label “out” here.
https://elixir.bootlin.com/linux/v6.7/source/drivers/gpu/drm/msm/adreno/adreno_gpu.c#L167

Regards,
Markus