On Fri, Apr 14, 2023 at 04:24:55PM +0100, Luca Vizzarro wrote:
void __user *argp = (void __user *)arg;
- int argi = (int)arg;
Strictly speaking, conversion from unsigned long to int is an undefined behaviour, unless the value fits into the range representable by int ;-)
case F_SETFD: err = 0;
set_close_on_exec(fd, arg & FD_CLOEXEC);
set_close_on_exec(fd, argi & FD_CLOEXEC);
Why?
case F_SETSIG: /* arg == 0 restores default behaviour. */
if (!valid_signal(arg)) {
if (!valid_signal(argi)) {
Why???
break; } err = 0;
filp->f_owner.signum = arg;
break;filp->f_owner.signum = argi;
These two are clearly bogus and I'd like to see more details on the series rationale, please.