Re: [PATCH v2 22/40] tile: fix put_user sparse errors

From: Michael S. Tsirkin
Date: Tue Jan 13 2015 - 04:40:49 EST


On Tue, Jan 13, 2015 at 11:35:35AM +0200, Michael S. Tsirkin wrote:
> On Mon, Jan 12, 2015 at 04:56:54PM -0500, Chris Metcalf wrote:
> > Nack for this patch as-is.
> >
> > On 1/6/2015 10:44 AM, Michael S. Tsirkin wrote:
> > >virtio wants to write bitwise types to userspace using put_user.
> > >At the moment this triggers sparse errors, since the value is passed
> > >through an integer.
> > >
> > >For example:
> > >
> > > __le32 __user *p;
> > > __le32 x;
> > > put_user(x, p);
> > >
> > >is safe, but currently triggers a sparse warning on tile.
> > >
> > >The reason has to do with this code:
> > > __typeof((x)-(x))
> > >which seems to be a way to force check for an integer type.
> >
> > No, it's purely a way to avoid
> >
> > warning: cast from pointer to integer of different size
> >
> > at every place we invoke put_user() with a pointer - which is
> > in fact pretty frequent throughout the kernel.
> >
> > The idiom of
> > casting to the difference of the type converts it to a type
> > of the same size as the input (whether integral or pointer),
> > but guaranteed to be an integral type. Then from there it's safe
> > to cast it on to a u64 without generating a warning.
>
> Thanks for the comments. OK, I see, though I wonder why didn't
> kbuild notify me about new warnings. Doesn't it build tile?
>
> So if you want to merge your patch, please let me know.
>
> But I think the fix can be much simpler: unsigned long has the same property
> without any of the complexity, or problems with sparse. So how about this:


Oh, I see you have written a better patch already.
Please ignore mine.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/