Re: Can kfree() sleep at runtime?
From: Jia-Ju Bai
Date: Thu May 31 2018 - 21:12:49 EST
- Next message: Guenter Roeck: "Re: [PATCH 1/2] power: supply: sbs-battery: don't assume MANUFACTURER_DATA formats"
- Previous message: kbuild test robot: "include/linux/syscalls.h:211:18: error: 'sys_mmap2' alias between functions of incompatible types 'long int(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int)' and 'long int(long int, long int, long int, long int, long int, long int)'"
- In reply to: Nadav Amit: "Re: Can kfree() sleep at runtime?"
- Next in thread: Christopher Lameter: "Re: Can kfree() sleep at runtime?"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2018/5/31 22:08, Matthew Wilcox wrote:
On Thu, May 31, 2018 at 09:10:07PM +0800, Jia-Ju Bai wrote:
I write a static analysis tool (DSAC), and it finds that kfree() can sleep.
Here is the call path for kfree().
Please look at it *from the bottom up*.
[FUNC] alloc_pages(GFP_KERNEL)
arch/x86/mm/pageattr.c, 756: alloc_pages in split_large_page
arch/x86/mm/pageattr.c, 1283: split_large_page in __change_page_attr
Here's your bug. Coming from kfree(), we can't end up in the
split_large_page() path. __change_page_attr may be called in several
different circumstances in which it would have to split a large page,
but the path from kfree() is not one of them.
I think the path from kfree() will lead to the 'level == PG_LEVEL_4K'
path, but I'm not really familiar with this x86 code.
Thanks for reply :)
But from the code in my call path, I cannot find why kfree() will only lead to the 'level == PG_LEVEL_4K' path.
Could you please explain it in more detail?
Best wishes,
Jia-Ju Bai
- Next message: Guenter Roeck: "Re: [PATCH 1/2] power: supply: sbs-battery: don't assume MANUFACTURER_DATA formats"
- Previous message: kbuild test robot: "include/linux/syscalls.h:211:18: error: 'sys_mmap2' alias between functions of incompatible types 'long int(long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int)' and 'long int(long int, long int, long int, long int, long int, long int)'"
- In reply to: Nadav Amit: "Re: Can kfree() sleep at runtime?"
- Next in thread: Christopher Lameter: "Re: Can kfree() sleep at runtime?"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]