diff mbox series

tools/mm: Use calloc and check the potential memory allocation failure

Message ID 20240829055621.3890-1-zhujun2@cmss.chinamobile.com (mailing list archive)
State New
Headers show
Series tools/mm: Use calloc and check the potential memory allocation failure | expand

Commit Message

Zhu Jun Aug. 29, 2024, 5:56 a.m. UTC
Replace malloc with calloc and add memory allocating check
of comm_str before used.

Signed-off-by: Zhu Jun <zhujun2@cmss.chinamobile.com>
---
 tools/mm/page_owner_sort.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Markus Elfring Aug. 29, 2024, 6:25 a.m. UTC | #1
> Replace malloc with calloc and add memory allocating check

                      memset(…, 0, …) call by calloc()?


> of comm_str before used.

* Add also a null pointer check for the detection of a memory allocation failure.

* Would you like to improve such a change description another bit
  (with tags like “Fixes” and “Cc”)?

* How do you think about to omit the statement “fprintf(stderr, "Out of memory\n");”?

* I suggest to omit the word “potential” from the summary phrase.


Regards,
Markus
Dev Jain Aug. 29, 2024, 7:39 a.m. UTC | #2
On 8/29/24 11:55, Markus Elfring wrote:
>> Replace malloc with calloc and add memory allocating check
>                        memset(…, 0, …) call by calloc()?

Calloc returns zeroed-out memory.

>
>
>> of comm_str before used.
> * Add also a null pointer check for the detection of a memory allocation failure.

Which is exactly what Zhu has done?

>
> * Would you like to improve such a change description another bit
>    (with tags like “Fixes” and “Cc”)?
>
> * How do you think about to omit the statement “fprintf(stderr, "Out of memory\n");”?

Why?

>
> * I suggest to omit the word “potential” from the summary phrase.
>
>
> Regards,
> Markus
>
Markus Elfring Aug. 29, 2024, 7:55 a.m. UTC | #3
>>> Replace malloc with calloc and add memory allocating check
>>                        memset(…, 0, …) call by calloc()?
>
> Calloc returns zeroed-out memory.

I propose to improve the change description considerably.


>>> of comm_str before used.
>> * Add also a null pointer check for the detection of a memory allocation failure.
>
> Which is exactly what Zhu has done?

Can the commit message become nicer anyhow?


…
>> * How do you think about to omit the statement “fprintf(stderr, "Out of memory\n");”?
>
> Why?

I imagine that a returned null pointer can eventually be sufficient already.
Would you get helpful background information from the variable “errno”?

Regards,
Markus
Dev Jain Aug. 29, 2024, 8:14 a.m. UTC | #4
On 8/29/24 13:25, Markus Elfring wrote:
>>>> Replace malloc with calloc and add memory allocating check
>>>                         memset(…, 0, …) call by calloc()?
>> Calloc returns zeroed-out memory.
> I propose to improve the change description considerably.
>
>
>>>> of comm_str before used.
>>> * Add also a null pointer check for the detection of a memory allocation failure.
>> Which is exactly what Zhu has done?
> Can the commit message become nicer anyhow?

I agree. The commit message should note two things, first that
a malloc followed by a memset to 0 can be reduced to single calloc,
and second that, "add memory allocating check" can be replaced by
"add null pointer check in case of allocation failure".

>
>
> …
>>> * How do you think about to omit the statement “fprintf(stderr, "Out of memory\n");”?
>> Why?
> I imagine that a returned null pointer can eventually be sufficient already.
> Would you get helpful background information from the variable “errno”?

In case of calloc failure, errno is always set to ENOMEM, so we are guaranteed
that any failure is an out of memory failure.

>
> Regards,
> Markus
diff mbox series

Patch

diff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c
index e1f264444342..4e2329831810 100644
--- a/tools/mm/page_owner_sort.c
+++ b/tools/mm/page_owner_sort.c
@@ -368,9 +368,12 @@  static __u64 get_ts_nsec(char *buf)
 
 static char *get_comm(char *buf)
 {
-	char *comm_str = malloc(TASK_COMM_LEN);
+	char *comm_str = calloc(TASK_COMM_LEN, sizeof(char));
 
-	memset(comm_str, 0, TASK_COMM_LEN);
+	if (!comm_str) {
+		fprintf(stderr, "Out of memory\n");
+		return NULL;
+	}
 
 	search_pattern(&comm_pattern, comm_str, buf);
 	errno = 0;