On 9/4/19 9:01 PM, Andrew Morton wrote: > On Wed, 4 Sep 2019 13:24:58 +0200 Vlastimil Babka <vbabka@xxxxxxx> wrote: > >> On 9/4/19 12:26 PM, zhong jiang wrote: >>> With the help of unsigned_lesser_than_zero.cocci. Unsigned 'nr_pages"' >>> compare with zero. And __get_user_pages_locked will return an long value. >>> Hence, Convert the long to compare with zero is feasible. >> >> It would be nicer if the parameter nr_pages was long again instead of unsigned >> long (note there are two variants of the function, so both should be changed). >> >>> Signed-off-by: zhong jiang <zhongjiang@xxxxxxxxxx> >> >> Fixes: 932f4a630a69 ("mm/gup: replace get_user_pages_longterm() with FOLL_LONGTERM") >> >> (which changed long to unsigned long) >> >> AFAICS... stable shouldn't be needed as the only "risk" is that we goto >> check_again even when we fail, which should be harmless. >> > > Really? If nr_pages gets a value of -EFAULT from the > __get_user_pages_locked() call, check_and_migrate_cma_pages() will go > berzerk? Hmm it should only reach that goto when it migrated something, which means it won't have to be migrated again, so eventually it should terminate. But it's very subtle, so I might be wrong. > And does __get_user_pages_locked() correctly handle a -ve errno > returned by __get_user_pages()? It's hard to see how... I think it does, but agree.