On Thu, Dec 25, 2014 at 11:37:45PM +0100, Helge Deller wrote: > Hi Michael, > > On 12/25/2014 10:29 AM, Michael S. Tsirkin wrote: > >virtio wants to read bitwise types from userspace using get_user. At the > > I don't know the virtio code much yet, but does it makes sense to read > bitwise types? > Will virtio then get possible troubles because of endianess correct as well?
There's no conversion: we are reading from __virtio16 __user * pointer into __virtio16 v value. > Do you have a code example, or the sparse error message ? > > Helge Sure. the code is upstream now. The warning is below. sparse warnings: (new ones prefixed by >>) >> drivers/vhost/vringh.c:554:18: sparse: cast to restricted __virtio16 vim +554 drivers/vhost/vringh.c 538 __virtio16 *p, u16 val)) 539 { 540 if (!vrh->event_indices) { 541 /* Old-school; update flags. */ 542 if (putu16(vrh, &vrh->vring.used->flags, 543 VRING_USED_F_NO_NOTIFY)) { 544 vringh_bad("Setting used flags %p", 545 &vrh->vring.used->flags); 546 } 547 } 548 } 549 550 /* Userspace access helpers: in this case, addresses are really userspace. */ 551 static inline int getu16_user(const struct vringh *vrh, u16 *val, const __virtio16 *p) 552 { 553 __virtio16 v = 0; > 554 int rc = get_user(v, (__force __virtio16 __user *)p); 555 *val = vringh16_to_cpu(vrh, v); 556 return rc; 557 } 558 559 static inline int putu16_user(const struct vringh *vrh, __virtio16 *p, u16 val) 560 { 561 __virtio16 v = cpu_to_vringh16(vrh, val); 562 return put_user(v, (__force __virtio16 __user *)p); > > >moment this triggers sparse errors, since the value is passed through an > >integer. > > > >Fix that up using __force. > > > >Signed-off-by: Michael S. Tsirkin <m...@redhat.com> > >--- > > arch/parisc/include/asm/uaccess.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > >diff --git a/arch/parisc/include/asm/uaccess.h > >b/arch/parisc/include/asm/uaccess.h > >index a5cb070..3a20da6 100644 > >--- a/arch/parisc/include/asm/uaccess.h > >+++ b/arch/parisc/include/asm/uaccess.h > >@@ -104,7 +104,7 @@ struct exception_data { > > } \ > > } \ > > \ > >- (x) = (__typeof__(*(ptr))) __gu_val; \ > >+ (x) = (__force __typeof__(*(ptr))) __gu_val; \ > > __gu_err; \ > > }) > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/