Skip to contentSkip to conversation

resource: Use 2-factor allocator calls

PATCH In review Kees Cook 3 participants 3 messages Jul 4, 2018 – Jul 6, 2018

lore
Share & tools
lore

Kees Cook

author
#0 lore raw

PATCH 1/1 resource: Use 2-factor allocator calls

As already done treewide, switch from open-coded multiplication to using 2-factor allocation helpers.

---
 kernel/resource.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
kernel/resource.c +3 -3
index d717acd12bf4..16debbf2d24c 100644
@@ -453,7 +453,7 @@ int walk_system_ram_res_rev(u64 start, u64 end, void *arg,
 	int ret = -1;
 
 	/* create a list */
-	rams = vmalloc(sizeof(struct resource) * rams_size);
+	rams = vmalloc(array_size(rams_size, sizeof(struct resource)));
 	if (!rams)
 		return ret;
 
@@ -469,8 +469,8 @@ int walk_system_ram_res_rev(u64 start, u64 end, void *arg,
 			int rams_new_size;
 
 			rams_new_size = rams_size + 16;
-			rams_new = vmalloc(sizeof(struct resource)
-							* rams_new_size);
+			rams_new = vmalloc(array_size(rams_new_size,
+						      sizeof(struct resource)));
 			if (!rams_new)
 				goto out;
 
Signature · 6 lines
2.17.1


-- 
Kees Cook
Pixel Security
#1 lore raw
Quoted 3 lines · On Wed, 4 Jul 2018 10:31:53 -0700 Kees Cook <[email protected]> wrote:

As already done treewide, switch from open-coded multiplication to using 2-factor allocation helpers.

This is against resource-add-walk_system_ram_res_rev.patch
(http://lkml.kernel.org/r/[email protected]).

That patch is awaiting (for several months!) a v2. Will this be happening?

#2 lore raw

Hi Andrew, Kees,

About the implemention of walk_system_ram_res_rev(), it was posted by AKASHI firstly for his arm kexec_file adding, later he dropped it because he took other way and doesn't need walk_system_ram_res_rev() any more in his patchset.

Then I found my below patch needs a walk_system_ram_res_rev(),

kernel/kexec_file.c: load kernel at top of system RAM if required

so I took AKASHI's patch and posted a patchset including above patch, and AKASHI's patch, it can be seen here:
http://lkml.kernel.org/r/[email protected]

Then Andrew reviewed and added comment to say this walk_system_ram_res_rev() is not good, and suggested me to change the singly linked list of child resource to standard list_head which is doubly linked list, then walk_system_ram_res_rev() can be implemented very easily to do reversed searching. So I posted v2:
http://lkml.kernel.org/r/[email protected]

Now the latest post is v6:
http://lkml.kernel.org/r/[email protected]

Since changing resource child tree to take doubly linked list list_head impacts all ARCH and many components, I am still fixing issues test robot reported since I can only test on x86. Now I plan to ask intel 0day team to tell how I can run scripts locally for all ARCH to find out all codes impacted and fix them all at one time.

So I think we can drop the old walk_system_ram_res_rev() in v1, I am still working on this issue. Sorry for the confusion I made because of my mistakes.

Thanks
Baoquan

Quoted 10 lines · Andrew Morton
Quoted 3 lines · On Wed, 4 Jul 2018 10:31:53 -0700 Kees Cook <[email protected]> wrote:

As already done treewide, switch from open-coded multiplication to using 2-factor allocation helpers.

This is against resource-add-walk_system_ram_res_rev.patch
(http://lkml.kernel.org/r/[email protected]).

That patch is awaiting (for several months!) a v2. Will this be happening?