From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Ellerman Subject: Re: [PATCH 00/18] uaccess: fix sparse warning on get_user for bitwise types Date: Wed, 17 Dec 2014 10:49:42 +1100 Message-ID: <1418773782.6400.5.camel@ellerman.id.au> References: <1418575877-21488-1-git-send-email-mst@redhat.com> <1418604052.19970.6.camel@ellerman.id.au> <20141215102227.GA26178@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Return-path: Received: from ozlabs.org ([103.22.144.67]:55110 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750899AbaLPXuO (ORCPT ); Tue, 16 Dec 2014 18:50:14 -0500 In-Reply-To: <20141215102227.GA26178@redhat.com> Sender: linux-arch-owner@vger.kernel.org List-ID: To: "Michael S. Tsirkin" Cc: linux-kernel@vger.kernel.org, Arnd Bergmann , linux-arch@vger.kernel.org On Mon, 2014-12-15 at 12:22 +0200, Michael S. Tsirkin wrote: > On Mon, Dec 15, 2014 at 11:40:52AM +1100, Michael Ellerman wrote: > > On Sun, 2014-12-14 at 18:51 +0200, Michael S. Tsirkin wrote: > > > At the moment, if p and x are both tagged as bitwise types, > > > get_user(x, p) produces a sparse warning on many architectures. > > > This is because *p on these architectures is loaded into long > > > (typically using asm), then cast back to typeof(*p). > > > > > > When typeof(*p) is a bitwise type (which is uncommon), such a cast needs > > > __force, otherwise sparse produces a warning. > > > > What does __force actually mean? Force the cast even though it's a bitfield? Or > > does it mean more than that? > > It's not a bitfield = it's a bitwise integer. OK. I didn't know what that meant, but Documentation/sparse.txt taught me. So it's a sparse only thing. > Once you tag a typedef as bitwise, casts to and from > an untypedefed integer cause sparse warnings. > > > ie. are we loosing the ability to detect any actual errors by adding force? > > > > cheers > > I think we aren't: > get_user(x, p) should be equivalent to x = *p except it > validates the pointer is to userspace memory, > and can handle pagefaults. > > Sparse warnings are triggered because these macros use > an untyped integer internally. > > Note that we are casting to typeof(*p) not typeof(x). > Even with the cast, if x and *p are of different types we should get the > warning, so I think we are not loosing the ability to detect any actual > errors. OK. Sounds good then. cheers