On Tue, Jan 02, 2024 at 05:09:55PM +0800, Huang, Ying wrote: > Gregory Price <gregory.price@xxxxxxxxxxxx> writes: > > > On Tue, Dec 26, 2023 at 02:05:35AM -0500, Gregory Price wrote: > >> On Wed, Dec 27, 2023 at 04:39:29PM +0800, Huang, Ying wrote: > >> > Gregory Price <gourry.memverge@xxxxxxxxx> writes: > >> > > >> > > + unsigned short mode = (*mode_arg & ~MPOL_MODE_FLAGS); > >> > > + > >> > > + *flags = *mode_arg & MPOL_MODE_FLAGS; > >> > > + *mode_arg = mode; > >> > > >> > It appears that it's unnecessary to introduce a local variable to split > >> > mode/flags. Just reuse the original code? > >> > > > > > Revisiting during fixes: Note the change from int to short. > > > > I chose to make this explicit because validate_mpol_flags takes a short. > > > > I'm fairly sure changing it back throws a truncation warning. > > Why something like below doesn't work? > > int sanitize_mpol_flags(int *mode, unsigned short *flags) > { > *flags = *mode & MPOL_MODE_FLAGS; > *mode &= ~MPOL_MODE_FLAGS; > > return validate_mpol_flags(*mode, flags); > } was concerned with silent truncation of (*mode) (int) to short. *shrug* happy to change it ~Gregory