Linux Metag architecture Discussion Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 09/40] metag/uaccess: fix sparse errors
       [not found] <1420558883-10131-1-git-send-email-mst@redhat.com>
@ 2015-01-06 15:43 ` Michael S. Tsirkin
       [not found]   ` <1420558883-10131-10-git-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
  2015-01-06 15:44 ` [PATCH v2 20/40] metag: fix put_user " Michael S. Tsirkin
  1 sibling, 1 reply; 5+ messages in thread
From: Michael S. Tsirkin @ 2015-01-06 15:43 UTC (permalink / raw)
  To: linux-kernel; +Cc: Arnd Bergmann, linux-arch, James Hogan, linux-metag

virtio wants to read bitwise types from userspace using get_user.  At the
moment this triggers sparse errors, since the value is passed through an
integer.

Fix that up using __force.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 arch/metag/include/asm/uaccess.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/metag/include/asm/uaccess.h b/arch/metag/include/asm/uaccess.h
index 0748b0a..c314b45 100644
--- a/arch/metag/include/asm/uaccess.h
+++ b/arch/metag/include/asm/uaccess.h
@@ -135,7 +135,7 @@ extern long __get_user_bad(void);
 ({                                                              \
 	long __gu_err, __gu_val;                                \
 	__get_user_size(__gu_val, (ptr), (size), __gu_err);	\
-	(x) = (__typeof__(*(ptr)))__gu_val;                     \
+	(x) = (__force __typeof__(*(ptr)))__gu_val;                     \
 	__gu_err;                                               \
 })
 
@@ -145,7 +145,7 @@ extern long __get_user_bad(void);
 	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);		\
 	if (access_ok(VERIFY_READ, __gu_addr, size))			\
 		__get_user_size(__gu_val, __gu_addr, (size), __gu_err);	\
-	(x) = (__typeof__(*(ptr)))__gu_val;                             \
+	(x) = (__force __typeof__(*(ptr)))__gu_val;                             \
 	__gu_err;                                                       \
 })
 
-- 
MST

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 20/40] metag: fix put_user sparse errors
       [not found] <1420558883-10131-1-git-send-email-mst@redhat.com>
  2015-01-06 15:43 ` [PATCH v2 09/40] metag/uaccess: fix sparse errors Michael S. Tsirkin
@ 2015-01-06 15:44 ` Michael S. Tsirkin
  2015-01-07  9:55   ` James Hogan
  1 sibling, 1 reply; 5+ messages in thread
From: Michael S. Tsirkin @ 2015-01-06 15:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: Arnd Bergmann, linux-arch, James Hogan, linux-metag

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.

Fix that up using __force.

This also fixes warnings due to writing a pointer out to
userland.

Note: this does not suppress any useful sparse checks since callers
do a cast (__typeof__(*(ptr))) (x) which in turn forces all the
necessary type checks.

Suggested-by: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 arch/metag/include/asm/uaccess.h | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/arch/metag/include/asm/uaccess.h b/arch/metag/include/asm/uaccess.h
index c314b45..9627c19 100644
--- a/arch/metag/include/asm/uaccess.h
+++ b/arch/metag/include/asm/uaccess.h
@@ -107,18 +107,23 @@ extern long __put_user_asm_w(unsigned int x, void __user *addr);
 extern long __put_user_asm_d(unsigned int x, void __user *addr);
 extern long __put_user_asm_l(unsigned long long x, void __user *addr);
 
-#define __put_user_size(x, ptr, size, retval)			\
-do {                                                            \
-	retval = 0;                                             \
-	switch (size) {                                         \
+#define __put_user_size(x, ptr, size, retval)				\
+do {                                                            	\
+	retval = 0;                                             	\
+	switch (size) {                                         	\
 	case 1:								\
-		retval = __put_user_asm_b((unsigned int)x, ptr); break;	\
+		retval = __put_user_asm_b((__force unsigned int)x, ptr);\
+		break;							\
 	case 2:								\
-		retval = __put_user_asm_w((unsigned int)x, ptr); break;	\
+		retval = __put_user_asm_w((__force unsigned int)x, ptr);\
+		break;							\
 	case 4:								\
-		retval = __put_user_asm_d((unsigned int)x, ptr); break;	\
+		retval = __put_user_asm_d((__force unsigned int)x, ptr);\
+		break;							\
 	case 8:								\
-		retval = __put_user_asm_l((unsigned long long)x, ptr); break; \
+		retval = __put_user_asm_l((__force unsigned long long)x,\
+					  ptr);				\
+		break;							\
 	default:							\
 		__put_user_bad();					\
 	}								\
-- 
MST

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 09/40] metag/uaccess: fix sparse errors
       [not found]   ` <1420558883-10131-10-git-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2015-01-07  9:47     ` James Hogan
       [not found]       ` <54AD00AC.2030801-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>
  0 siblings, 1 reply; 5+ messages in thread
From: James Hogan @ 2015-01-07  9:47 UTC (permalink / raw)
  To: Michael S. Tsirkin, linux-kernel-u79uwXL29TY76Z2rM5mHXA
  Cc: Arnd Bergmann, linux-arch-u79uwXL29TY76Z2rM5mHXA,
	linux-metag-u79uwXL29TY76Z2rM5mHXA

[-- Attachment #1: Type: text/plain, Size: 1865 bytes --]

Hi Machael,

On 06/01/15 15:43, Michael S. Tsirkin wrote:
> virtio wants to read bitwise types from userspace using get_user.  At the
> moment this triggers sparse errors, since the value is passed through an
> integer.
> 
> Fix that up using __force.
> 
> Signed-off-by: Michael S. Tsirkin <mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
>  arch/metag/include/asm/uaccess.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/metag/include/asm/uaccess.h b/arch/metag/include/asm/uaccess.h
> index 0748b0a..c314b45 100644
> --- a/arch/metag/include/asm/uaccess.h
> +++ b/arch/metag/include/asm/uaccess.h
> @@ -135,7 +135,7 @@ extern long __get_user_bad(void);
>  ({                                                              \
>  	long __gu_err, __gu_val;                                \
>  	__get_user_size(__gu_val, (ptr), (size), __gu_err);	\
> -	(x) = (__typeof__(*(ptr)))__gu_val;                     \
> +	(x) = (__force __typeof__(*(ptr)))__gu_val;                     \

As I mentioned before, can you please adjust the position of the \ to
line up.

>  	__gu_err;                                               \
>  })
>  
> @@ -145,7 +145,7 @@ extern long __get_user_bad(void);
>  	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);		\
>  	if (access_ok(VERIFY_READ, __gu_addr, size))			\
>  		__get_user_size(__gu_val, __gu_addr, (size), __gu_err);	\
> -	(x) = (__typeof__(*(ptr)))__gu_val;                             \
> +	(x) = (__force __typeof__(*(ptr)))__gu_val;                             \

same here (this one causes checkpatch error due to 80 column limit).

>  	__gu_err;                                                       \
>  })
>  
> 

With those changes,
Acked-by: James Hogan <james.hogan-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>

Cheers
James


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 20/40] metag: fix put_user sparse errors
  2015-01-06 15:44 ` [PATCH v2 20/40] metag: fix put_user " Michael S. Tsirkin
@ 2015-01-07  9:55   ` James Hogan
  0 siblings, 0 replies; 5+ messages in thread
From: James Hogan @ 2015-01-07  9:55 UTC (permalink / raw)
  To: Michael S. Tsirkin, linux-kernel; +Cc: Arnd Bergmann, linux-arch, linux-metag

[-- Attachment #1: Type: text/plain, Size: 2808 bytes --]

On 06/01/15 15:44, 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.
> 
> Fix that up using __force.
> 
> This also fixes warnings due to writing a pointer out to
> userland.
> 
> Note: this does not suppress any useful sparse checks since callers
> do a cast (__typeof__(*(ptr))) (x) which in turn forces all the
> necessary type checks.
> 
> Suggested-by: James Hogan <james.hogan@imgtec.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
>  arch/metag/include/asm/uaccess.h | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/metag/include/asm/uaccess.h b/arch/metag/include/asm/uaccess.h
> index c314b45..9627c19 100644
> --- a/arch/metag/include/asm/uaccess.h
> +++ b/arch/metag/include/asm/uaccess.h
> @@ -107,18 +107,23 @@ extern long __put_user_asm_w(unsigned int x, void __user *addr);
>  extern long __put_user_asm_d(unsigned int x, void __user *addr);
>  extern long __put_user_asm_l(unsigned long long x, void __user *addr);
>  
> -#define __put_user_size(x, ptr, size, retval)			\
> -do {                                                            \
> -	retval = 0;                                             \
> -	switch (size) {                                         \
> +#define __put_user_size(x, ptr, size, retval)				\
> +do {                                                            	\
> +	retval = 0;                                             	\
> +	switch (size) {                                         	\

On the last 3 lines here you've added a tab after spaces which
checkpatch complains about. With that fixed (or converted to tabs properly):

Acked-by: James Hogan <james.hogan@imgtec.com>

Cheers
James

>  	case 1:								\
> -		retval = __put_user_asm_b((unsigned int)x, ptr); break;	\
> +		retval = __put_user_asm_b((__force unsigned int)x, ptr);\
> +		break;							\
>  	case 2:								\
> -		retval = __put_user_asm_w((unsigned int)x, ptr); break;	\
> +		retval = __put_user_asm_w((__force unsigned int)x, ptr);\
> +		break;							\
>  	case 4:								\
> -		retval = __put_user_asm_d((unsigned int)x, ptr); break;	\
> +		retval = __put_user_asm_d((__force unsigned int)x, ptr);\
> +		break;							\
>  	case 8:								\
> -		retval = __put_user_asm_l((unsigned long long)x, ptr); break; \
> +		retval = __put_user_asm_l((__force unsigned long long)x,\
> +					  ptr);				\
> +		break;							\
>  	default:							\
>  		__put_user_bad();					\
>  	}								\
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 09/40] metag/uaccess: fix sparse errors
       [not found]       ` <54AD00AC.2030801-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>
@ 2015-01-07  9:55         ` Michael S. Tsirkin
  0 siblings, 0 replies; 5+ messages in thread
From: Michael S. Tsirkin @ 2015-01-07  9:55 UTC (permalink / raw)
  To: James Hogan
  Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, Arnd Bergmann,
	linux-arch-u79uwXL29TY76Z2rM5mHXA,
	linux-metag-u79uwXL29TY76Z2rM5mHXA

On Wed, Jan 07, 2015 at 09:47:24AM +0000, James Hogan wrote:
> Hi Machael,
> 
> On 06/01/15 15:43, Michael S. Tsirkin wrote:
> > virtio wants to read bitwise types from userspace using get_user.  At the
> > moment this triggers sparse errors, since the value is passed through an
> > integer.
> > 
> > Fix that up using __force.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> > ---
> >  arch/metag/include/asm/uaccess.h | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/arch/metag/include/asm/uaccess.h b/arch/metag/include/asm/uaccess.h
> > index 0748b0a..c314b45 100644
> > --- a/arch/metag/include/asm/uaccess.h
> > +++ b/arch/metag/include/asm/uaccess.h
> > @@ -135,7 +135,7 @@ extern long __get_user_bad(void);
> >  ({                                                              \
> >  	long __gu_err, __gu_val;                                \
> >  	__get_user_size(__gu_val, (ptr), (size), __gu_err);	\
> > -	(x) = (__typeof__(*(ptr)))__gu_val;                     \
> > +	(x) = (__force __typeof__(*(ptr)))__gu_val;                     \
> 
> As I mentioned before, can you please adjust the position of the \ to
> line up.
> >  	__gu_err;                                               \
> >  })
> >  
> > @@ -145,7 +145,7 @@ extern long __get_user_bad(void);
> >  	const __typeof__(*(ptr)) __user *__gu_addr = (ptr);		\
> >  	if (access_ok(VERIFY_READ, __gu_addr, size))			\
> >  		__get_user_size(__gu_val, __gu_addr, (size), __gu_err);	\
> > -	(x) = (__typeof__(*(ptr)))__gu_val;                             \
> > +	(x) = (__force __typeof__(*(ptr)))__gu_val;                             \
> 
> same here (this one causes checkpatch error due to 80 column limit).

Oops. Sorry. Will fix both. I won't repost unless there are more issues.

> 
> >  	__gu_err;                                                       \
> >  })
> >  
> > 
> 
> With those changes,
> Acked-by: James Hogan <james.hogan-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>
> 
> Cheers
> James
> 


--
To unsubscribe from this list: send the line "unsubscribe linux-metag" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-01-07  9:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1420558883-10131-1-git-send-email-mst@redhat.com>
2015-01-06 15:43 ` [PATCH v2 09/40] metag/uaccess: fix sparse errors Michael S. Tsirkin
     [not found]   ` <1420558883-10131-10-git-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-01-07  9:47     ` James Hogan
     [not found]       ` <54AD00AC.2030801-1AXoQHu6uovQT0dZR+AlfA@public.gmane.org>
2015-01-07  9:55         ` Michael S. Tsirkin
2015-01-06 15:44 ` [PATCH v2 20/40] metag: fix put_user " Michael S. Tsirkin
2015-01-07  9:55   ` James Hogan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox