Re: [PATCH v3 04/26] compat_ioctl: move PPPIOCSCOMPRESS32 to ppp-generic.c

From: Al Viro
Date: Wed Apr 17 2019 - 17:16:43 EST


On Tue, Apr 16, 2019 at 10:19:42PM +0200, Arnd Bergmann wrote:
> +#ifdef CONFIG_COMPAT
> +struct ppp_option_data32 {
> + compat_caddr_t ptr;

Huh? compat_uptr_t, surely? I realize that compat_ioctl.c is bogus
that way right now, but let's not spread that crap into the places
where it's harder to find...

> err = -EFAULT;
> - if (copy_from_user(&data, (void __user *) arg, sizeof(data)))
> - goto out;
> +#ifdef CONFIG_COMPAT
> + if (compat) {
> + struct ppp_option_data32 data32;
> +
> + if (copy_from_user(&data32, (void __user *) arg,
> + sizeof(data32)))
> + goto out;
> +
> + data.ptr = compat_ptr(data32.ptr);
> + data.length = data32.length;
> + data.transmit = data32.transmit;
> + } else
> +#endif
> + {
> + if (copy_from_user(&data, (void __user *) arg, sizeof(data)))
> + goto out;
> + }

*UGH*

Do that in caller, please. And sod the flag argument...