Re: [PATCH] mm/migrate: fix do_pages_move for compat pointers

From: Arnd Bergmann
Date: Tue Oct 03 2023 - 13:02:11 EST


On Tue, Oct 3, 2023, at 18:57, Arnd Bergmann wrote:
> On Tue, Oct 3, 2023, at 18:49, Andrew Morton wrote:
>> On Tue, 3 Oct 2023 10:48:56 -0400 Gregory Price
>> <gourry.memverge@xxxxxxxxx> wrote:
>>
>>> do_pages_move does not handle compat pointers for the page list.
>>> correctly. Add in_compat_syscall check and appropriate get_user
>>> fetch when iterating the page list.
>>
>> What are the userspace visible effects of this change?
>
> It makes the syscall in compat mode (32-bit userspace, 64-bit kernel)
> work the same way as the native 32-bit syscall again, restoring the
> behavior before my broken commit 5b1b561ba73c ("mm: simplify
> compat_sys_move_pages").

More specifically, my patch moved the parsing of the 'pages'
array from the main entry point into do_pages_stat(), which left
the syscall working correctly for the 'stat' operation (nodes = NULL),
while the 'move' operation (nodes != NULL) is now missing
the conversion and interprets 'pages' as an array of 64-bit
pointers instead of the intended 32-bit userspace pointers.

Arnd