check kmalloc return value in mtd/sm_rtl.c
PATCH 1/1 check kmalloc return value in mtd/sm_rtl.c
Description:
Because malloc/kzalloc may fail, we should check kmalloc/kzalloc return value
in sm_create_sysfs_attributes(), mtd/sm_rtl.c and do error handling.
Meanwhile, we should check sm_create_sysfs_attributes return value.
--- drivers/mtd/sm_ftl.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
drivers/mtd/sm_ftl.c +18 -0
@@ -64,12 +64,16 @@ struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl) SM_SMALL_PAGE - SM_CIS_VENDOR_OFFSET);char *vendor =kmalloc (vendor_len,GFP_KERNEL ); +if (!vendor) + goto error1;memcpy (vendor, ftl->cis_buffer +SM_CIS_VENDOR_OFFSET , vendor_len); vendor[vendor_len] =0 ;/* Initialize sysfs attributes */ vendor_attribute =kzalloc (sizeof (struct sm_sysfs_attribute ),GFP_KERNEL ); +if (!vendor_attribute) + goto error2;sysfs_attr_init (&vendor_attribute->dev_attr.attr);
@@ -83,12 +87,24 @@ struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl)/* Create array of pointers to the attributes */ attributes =kzalloc (sizeof (struct attribute *) * (NUM_ATTRIBUTES +1 ),GFP_KERNEL ); +if (!attributes) + got error3; attributes[0 ] = &vendor_attribute->dev_attr.attr;/* Finally create the attribute group */ attr_group =kzalloc (sizeof (struct attribute_group ),GFP_KERNEL ); +if (!attr_group) + goto error4; attr_group->attrs = attributes;return attr_group; +error4: +kfree (attributes); +error3: +kfree (vendor_attribute); +error2: +kfree (vendor); +error1: +return NULL ; }void sm_delete_sysfs_attributes (struct sm_ftl *ftl)
@@ -1178,6 +1194,8 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd) } ftl->disk_attributes =sm_create_sysfs_attributes (ftl); +if (!ftl->disk_attributes) + goto error6; trans->disk_attributes = ftl->disk_attributes; sm_printk("Found %d MiB xD/SmartMedia FTL on mtd%d",
Signature · 1 line
1.7.2.3
Hi,
drivers/mtd/sm_ftl.c struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl) · line 91
Quoted 6 lines · Xiaochen Wang
drivers/mtd/sm_ftl.c +2
-0@@ -83,12 +87,24 @@ struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl)/* Create array of pointers to the attributes */ attributes =kzalloc (sizeof (struct attribute *) * (NUM_ATTRIBUTES +1 ),GFP_KERNEL ); +if (!attributes) + got error3;
Please, compile-check patches before sending them out :-)
Best Regards,
Artem Bityutskiy (Артём Битюцкий)
Hi, Artem
Quoted 2 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ if (!attributes) + got error3;
I'm so sorry for that:(
Quoted 1 line
Please, compile-check patches before sending them out :-)
Thanks for your advice, I'll do it.
The new patch , which has been compile-checked, is here:
Description:
Because malloc/kzalloc may fail, we should check kmalloc/kzalloc return value
in sm_create_sysfs_attributes(), mtd/sm_rtl.c and do error handling.
Meanwhile, we should check sm_create_sysfs_attributes return value.
--- drivers/mtd/sm_ftl.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
drivers/mtd/sm_ftl.c +18 -0
@@ -64,12 +64,16 @@ struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl) SM_SMALL_PAGE - SM_CIS_VENDOR_OFFSET);char *vendor =kmalloc (vendor_len,GFP_KERNEL ); +if (!vendor) + goto error1;memcpy (vendor, ftl->cis_buffer +SM_CIS_VENDOR_OFFSET , vendor_len); vendor[vendor_len] =0 ;/* Initialize sysfs attributes */ vendor_attribute =kzalloc (sizeof (struct sm_sysfs_attribute ),GFP_KERNEL ); +if (!vendor_attribute) + goto error2;sysfs_attr_init (&vendor_attribute->dev_attr.attr);
@@ -83,12 +87,24 @@ struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl)/* Create array of pointers to the attributes */ attributes =kzalloc (sizeof (struct attribute *) * (NUM_ATTRIBUTES +1 ),GFP_KERNEL ); +if (!attributes) + goto error3; attributes[0 ] = &vendor_attribute->dev_attr.attr;/* Finally create the attribute group */ attr_group =kzalloc (sizeof (struct attribute_group ),GFP_KERNEL ); +if (!attr_group) + goto error4; attr_group->attrs = attributes;return attr_group; +error4: +kfree (attributes); +error3: +kfree (vendor_attribute); +error2: +kfree (vendor); +error1: +return NULL ; }void sm_delete_sysfs_attributes (struct sm_ftl *ftl)
@@ -1178,6 +1194,8 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd) } ftl->disk_attributes =sm_create_sysfs_attributes (ftl); +if (!ftl->disk_attributes) + goto error6; trans->disk_attributes = ftl->disk_attributes; sm_printk("Found %d MiB xD/SmartMedia FTL on mtd%d",
Signature · 1 line
1.7.2.3
Artem Bityutskiy
AppliedQuoted 7 lines · Xiaochen Wang
Hi, Artem
Quoted 2 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ if (!attributes) + got error3;I'm so sorry for that:(
Quoted 1 line
Please, compile-check patches before sending them out :-)
Thanks for your advice, I'll do it.
Quoted 8 lines
The new patch , which has been compile-checked, is here:
Description:
Because malloc/kzalloc may fail, we should check kmalloc/kzalloc return value
insm_create_sysfs_attributes(),mtd/sm_rtl.cand do error handling.
Meanwhile, we should checksm_create_sysfs_attributesreturn value.Signed-off-by Xiaochen Wang <[email protected]>
Pushed to l2-mtd-2.6.git, thanks.
Signature · 2 lines
Best Regards, Artem Bityutskiy (Артём Битюцкий)