On Fri, 19 Nov 2021 23:12:55 +0800 Kuan-Ying Lee <Kuan-Ying.Lee@xxxxxxxxxxxx> wrote: > > > > Call sequence: > > > > ptr = kmalloc(size, GFP_KERNEL); > > > > page = virt_to_page(ptr); > > > > kfree(page_address(page)); > > > > ptr = kmalloc(size, GFP_KERNEL); > > > > How is this call sequence valid? page_address returns the address of > > the start of the page, while kmalloced object could have been located > > in the middle of it. > > Thanks for pointing out. I miss the offset. > > It should be listed as below. > > ptr = kmalloc(size, GFP_KERNEL); > page = virt_to_page(ptr); > offset = offset_in_page(ptr); > kfree(page_address(page) + offset); > ptr = kmalloc(size, GFP_KERNEL); I updated the changelog to reflect this.