Re: [PATCH] staging: comedi: cast to (unsigned int *)
From: Dan Carpenter
Date: Fri Feb 19 2021 - 04:27:34 EST
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.
regards,
dan carpenter