On Thu, Jan 16, 2025 at 05:30:56PM -0800, SeongJae Park wrote: > Split out the madvise parameters validation logic from do_madvise(), for > easy reuse of the logic from a future change. > > Signed-off-by: SeongJae Park <sj@xxxxxxxxxx> Another decent cleanup, regardless of appllication, so: Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> > --- > mm/madvise.c | 32 ++++++++++++++++++++++---------- > 1 file changed, 22 insertions(+), 10 deletions(-) > > diff --git a/mm/madvise.c b/mm/madvise.c > index ae0964bc4d88..9cc31efe875a 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -1592,6 +1592,27 @@ static void madvise_unlock(struct mm_struct *mm, int behavior) > mmap_read_unlock(mm); > } > > +static bool is_valid_madvise(unsigned long start, size_t len_in, int behavior) > +{ > + size_t len; > + > + if (!madvise_behavior_valid(behavior)) > + return false; > + > + if (!PAGE_ALIGNED(start)) > + return false; > + len = PAGE_ALIGN(len_in); Kind of a pity to duplicate this, but not exactly a big deal. > + > + /* Check to see whether len was rounded up from small -ve to zero */ > + if (len_in && !len) > + return false; > + > + if (start + len < start) > + return false; > + > + return true; > +} > + > /* > * The madvise(2) system call. > * > @@ -1671,20 +1692,11 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh > size_t len; > struct blk_plug plug; > > - if (!madvise_behavior_valid(behavior)) > + if (!is_valid_madvise(start, len_in, behavior)) > return -EINVAL; > > - if (!PAGE_ALIGNED(start)) > - return -EINVAL; > len = PAGE_ALIGN(len_in); > - > - /* Check to see whether len was rounded up from small -ve to zero */ > - if (len_in && !len) > - return -EINVAL; > - > end = start + len; > - if (end < start) > - return -EINVAL; > > if (end == start) > return 0; > -- > 2.39.5