From: Dan Carpenter > Sent: 19 February 2021 09:26 > > On Fri, Feb 19, 2021 at 09:03:59AM +0000, David Laight wrote: > > > It's kind of moot anyway because the patch is outdated. But the reason > > > for the ___force is that the same `struct comedi_cmd` is used in both > > > user and kernel contexts. In user contexts, the `chanlist` member > > > points to user memory and in kernel contexts it points to kernel memory > > > (copied from userspace). > > > > Can't you use a union of the user and kernel pointers? > > (Possibly even anonymous?) > > Although, ideally, keeping them in separate fields is better. > > 8 bytes for a pointer isn't going make a fat lot of difference. > > > > Creating a union is worse than adding casts. With the casts, at least > you know that you're doing something dangerous. It's good that it looks > scary because it is scary. > > Keeping them in separate fields is a good idea, but this is part of the > user space API so it's not possible. > > The best we can do is adding some more comments so people know why we > are doing the scary casts. Another option is to use a longer structure in the kernel with the kernel pointer in the 'extension'. So you could have: struct kernel_foo { struct foo; void *kernel_pointer; }; David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales) _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel