On Tue, Oct 3, 2023, at 19:17, Andrew Morton wrote: > On Tue, 03 Oct 2023 19:01:45 +0200 "Arnd Bergmann" <arnd@xxxxxxxx> wrote: >> 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. >> > > Thanks. So is a cc:stable warranted? Yes, absolutely. It is possible that nobody noticed this bug because the few applications that actually call move_pages are unlikely to run in compat mode because of their large memory requirements, but this clearly fixes a user-visible regression and should have been caught by ltp. Arnd