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

Commit c7308c81 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Driver core: fix show_uevent from taking up way too much stack



Declaring an array of PAGE_SIZE does bad things for people running with
4k stacks...

Thanks to Tilman Schmidt for tracking this down.

Cc: Tilman Schmidt <tilman@imap.cc>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent dc87c398
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -252,7 +252,7 @@ static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
	struct kobject *top_kobj;
	struct kset *kset;
	char *envp[32];
	char data[PAGE_SIZE];
	char *data = NULL;
	char *pos;
	int i;
	size_t count = 0;
@@ -276,6 +276,10 @@ static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
		if (!kset->uevent_ops->filter(kset, &dev->kobj))
			goto out;

	data = (char *)get_zeroed_page(GFP_KERNEL);
	if (!data)
		return -ENOMEM;

	/* let the kset specific function add its keys */
	pos = data;
	retval = kset->uevent_ops->uevent(kset, &dev->kobj,
@@ -290,6 +294,7 @@ static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
		count += sprintf(pos, "%s\n", envp[i]);
	}
out:
	free_page((unsigned long)data);
	return count;
}