Skip to contentSkip to conversation

drivers: qcom: rpmh: use struct_size() in kzalloc()

PATCH In review Gustavo A. R. Silva 2 participants 5 messages Dec 24, 2018 – Jan 29, 2019

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 drivers: qcom: rpmh: use struct_size() in kzalloc()

One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    void *entry[];
};

instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This issue was detected with the help of Coccinelle.

---
 drivers/soc/qcom/rpmh.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/soc/qcom/rpmh.c +1 -2
index c7beb6841289..12c057a0b325 100644
@@ -362,8 +362,7 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state,
 	if (!count)
 		return -EINVAL;
 
-	req = kzalloc(sizeof(*req) + count * sizeof(req->rpm_msgs[0]),
-		      GFP_ATOMIC);
+	req = kzalloc(struct_size(req, rpm_msgs, count), GFP_ATOMIC);
 	if (!req)
 		return -ENOMEM;
 	req->count = count;
Signature · 1 line
2.17.0
#1 lore raw

Hi,

Friendly ping:

Who can ack or review this patch, please?

Thanks
--
Gustavo

Quoted 38 lines · Gustavo A. R. Silva

One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:

struct foo {
     int stuff;
     void *entry[];
};

instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This issue was detected with the help of Coccinelle.

---
  drivers/soc/qcom/rpmh.c | 3 +--
  1 file changed, 1 insertion(+), 2 deletions(-)
drivers/soc/qcom/rpmh.c +1 -2
index c7beb6841289..12c057a0b325 100644
@@ -362,8 +362,7 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state,
  	if (!count)
  		return -EINVAL;
 
-	req = kzalloc(sizeof(*req) + count * sizeof(req->rpm_msgs[0]),
-		      GFP_ATOMIC);
+	req = kzalloc(struct_size(req, rpm_msgs, count), GFP_ATOMIC);
  	if (!req)
  		return -ENOMEM;
  	req->count = count;
#2 lore raw

Hi all,

Friendly ping:

Who can take this?

Thanks
--
Gustavo

Quoted 49 lines · Gustavo A. R. Silva

Hi,

Friendly ping:

Who can ack or review this patch, please?

Thanks

Signature · 1 line
Gustavo
Quoted 37 lines · Gustavo A. R. Silva

One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:

struct foo {
     int stuff;
     void *entry[];
};

instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This issue was detected with the help of Coccinelle.

---
  drivers/soc/qcom/rpmh.c | 3 +--

  1 file changed, 1 insertion(+), 2 deletions(-)
drivers/soc/qcom/rpmh.c +1 -1
index c7beb6841289..12c057a0b325 100644
@@ -362,8 +362,7 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state,
       if (!count)
           return -EINVAL;
   -    req = kzalloc(sizeof(*req) + count * sizeof(req->rpm_msgs[0]),
-              GFP_ATOMIC);
+    req = kzalloc(struct_size(req, rpm_msgs, count), GFP_ATOMIC);
       if (!req)
           return -ENOMEM;
       req->count = count;
Reviewed-by on v1 1/1
#3 lore raw
In reply to Gustavo A. R. Silva
Quoted 12 lines · Gustavo A. R. Silva

One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    void *entry[];
};

instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);

Quoted 8 lines

Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This issue was detected with the help of Coccinelle.

Quoted 21 lines
---
 drivers/soc/qcom/rpmh.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/soc/qcom/rpmh.c +1 -3
index c7beb6841289..12c057a0b325 100644
@@ -362,8 +362,7 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state,
        if (!count)
                return -EINVAL;
 
-       req = kzalloc(sizeof(*req) + count * sizeof(req->rpm_msgs[0]),
-                     GFP_ATOMIC);
+       req = kzalloc(struct_size(req, rpm_msgs, count), GFP_ATOMIC);
        if (!req)
                return -ENOMEM;
        req->count = count;
--

2.17.0

#4 lore raw
Quoted 17 lines · Amit Kucheria
Quoted 15 lines · Gustavo A. R. Silva

One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    void *entry[];
};

instance = kzalloc(sizeof(struct foo) + sizeof(void *) * count, GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:

Quoted 8 lines
Quoted 5 lines

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This issue was detected with the help of Coccinelle.

Thanks, Amit.

--
Gustavo

Quoted 21 lines
Quoted 21 lines
---
 drivers/soc/qcom/rpmh.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/soc/qcom/rpmh.c +1 -3
index c7beb6841289..12c057a0b325 100644
@@ -362,8 +362,7 @@ int rpmh_write_batch(const struct device *dev, enum rpmh_state state,
        if (!count)
                return -EINVAL;
 
-       req = kzalloc(sizeof(*req) + count * sizeof(req->rpm_msgs[0]),
-                     GFP_ATOMIC);
+       req = kzalloc(struct_size(req, rpm_msgs, count), GFP_ATOMIC);
        if (!req)
                return -ENOMEM;
        req->count = count;
--

2.17.0