On 27/07/2022 11:31, Kalle Valo wrote:
Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx> writes:
+static ssize_t read_file_firmware_feature_caps(struct file *file,
+ char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ struct wcn36xx *wcn = file->private_data;
+ unsigned long page = get_zeroed_page(GFP_KERNEL);
+ char *p = (char *)page;
+ int i;
+ int ret;
+
+ if (!p)
+ return -ENOMEM;
+
+ mutex_lock(&wcn->hal_mutex);
+ for (i = 0; i < MAX_FEATURE_SUPPORTED; i++) {
+ if (wcn36xx_firmware_get_feat_caps(wcn->fw_feat_caps, i)) {
+ p += sprintf(p, "%s\n",
+ wcn36xx_firmware_get_cap_name(i));
+ }
+ }
+ mutex_unlock(&wcn->hal_mutex);
+
+ ret = simple_read_from_buffer(user_buf, count, ppos, (char *)page,
+ (unsigned long)p - page);
+
+ free_page(page);
+ return ret;
+}
Why not use the normal use kzalloc() and kfree()? That way you would not
need a separate page variable. What's the benefit from
get_zeroed_page()?
TBH I did a copy/paste here from another driver... I forget which
Also I don't see any checks for a memory allocation failure.
its there
char *p = (char*) page;
if (!p)
return -ENOMEM;
I can V2 this for kzalloc and kfree if you prefer though
---
bod