Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63662139 authored by David Woodhouse's avatar David Woodhouse
Browse files

params: Fix potential memory leak in add_sysfs_param()



On allocation failure, it would fail to free the old attrs array which
was no longer referenced by anything (since it would free the old
module_param_attrs struct on the way out).

Comment the suspicious-looking krealloc() usage to explain why it *isn't*
actually buggy, despite looking like a classic realloc() usage bug.

Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent fe9ab00f
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -613,10 +613,13 @@ static __modinit int add_sysfs_param(struct module_kobject *mk,
		       sizeof(*mk->mp) + sizeof(mk->mp->attrs[0]) * (num+1),
		       GFP_KERNEL);
	if (!new) {
		kfree(mk->mp);
		kfree(attrs);
		err = -ENOMEM;
		goto fail;
	}
	/* Despite looking like the typical realloc() bug, this is safe.
	 * We *want* the old 'attrs' to be freed either way, and we'll store
	 * the new one in the success case. */
	attrs = krealloc(attrs, sizeof(new->grp.attrs[0])*(num+2), GFP_KERNEL);
	if (!attrs) {
		err = -ENOMEM;