All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
@ 2014-08-07 22:08 Martin Berglund
  2014-08-08  2:18 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 7+ messages in thread
From: Martin Berglund @ 2014-08-07 22:08 UTC (permalink / raw)
  To: Forest Bond, Greg Kroah-Hartman, Guido Martínez, devel,
	linux-kernel

Add missing __user macro casting in the function wpa_set_keys.
This is okay since the function handles the possibility of
param->u.wpa_key.key and param->u.wpa_key.seq pointing to
kernelspace using a flag, fcpfkernel.

Signed-off-by: Martin Berglund <martin@rogsta.net>
---
This was submitted as part of Eudyptula challenge task 16

 drivers/staging/vt6655/wpactl.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
index 5f454ca..d75dd79 100644
--- a/drivers/staging/vt6655/wpactl.c
+++ b/drivers/staging/vt6655/wpactl.c
@@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
 	} else {
 		spin_unlock_irq(&pDevice->lock);
 		if (param->u.wpa_key.key &&
-		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
+		    copy_from_user(&abyKey[0],
+				   (void __user *)param->u.wpa_key.key,
+				   param->u.wpa_key.key_len)) {
 			spin_lock_irq(&pDevice->lock);
 			return -EINVAL;
 		}
@@ -262,7 +264,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
 	} else {
 		spin_unlock_irq(&pDevice->lock);
 		if (param->u.wpa_key.seq &&
-		    copy_from_user(&abySeq[0], param->u.wpa_key.seq, param->u.wpa_key.seq_len)) {
+		    copy_from_user(&abySeq[0],
+				   (void __user *)param->u.wpa_key.seq,
+				   param->u.wpa_key.seq_len)) {
 			spin_lock_irq(&pDevice->lock);
 			return -EINVAL;
 		}
-- 
1.7.10.4


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

* Re: [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
  2014-08-07 22:08 [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings Martin Berglund
@ 2014-08-08  2:18 ` Greg Kroah-Hartman
  2014-08-08  7:07   ` Martin Berglund
  0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2014-08-08  2:18 UTC (permalink / raw)
  To: Martin Berglund; +Cc: Forest Bond, Guido Martínez, devel, linux-kernel

On Thu, Aug 07, 2014 at 11:08:34PM +0100, Martin Berglund wrote:
> Add missing __user macro casting in the function wpa_set_keys.
> This is okay since the function handles the possibility of
> param->u.wpa_key.key and param->u.wpa_key.seq pointing to
> kernelspace using a flag, fcpfkernel.
> 
> Signed-off-by: Martin Berglund <martin@rogsta.net>
> ---
> This was submitted as part of Eudyptula challenge task 16
> 
>  drivers/staging/vt6655/wpactl.c |    8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
> index 5f454ca..d75dd79 100644
> --- a/drivers/staging/vt6655/wpactl.c
> +++ b/drivers/staging/vt6655/wpactl.c
> @@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
>  	} else {
>  		spin_unlock_irq(&pDevice->lock);
>  		if (param->u.wpa_key.key &&
> -		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
> +		    copy_from_user(&abyKey[0],
> +				   (void __user *)param->u.wpa_key.key,

Would it be better to mark this pointer as __user in the structure
itself?  Or is it also used as a kernel structure in other places?

thanks,

greg k-h

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

* Re: [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
  2014-08-08  2:18 ` Greg Kroah-Hartman
@ 2014-08-08  7:07   ` Martin Berglund
  2014-08-08 13:47     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 7+ messages in thread
From: Martin Berglund @ 2014-08-08  7:07 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: Forest Bond, Guido Martínez, devel, linux-kernel

On Thu, Aug 07, 2014 at 07:18:13PM -0700, Greg Kroah-Hartman wrote:
> On Thu, Aug 07, 2014 at 11:08:34PM +0100, Martin Berglund wrote:
> > Add missing __user macro casting in the function wpa_set_keys.
> > This is okay since the function handles the possibility of
> > param->u.wpa_key.key and param->u.wpa_key.seq pointing to
> > kernelspace using a flag, fcpfkernel.
> > 
> > Signed-off-by: Martin Berglund <martin@rogsta.net>
> > ---
> > This was submitted as part of Eudyptula challenge task 16
> > 
> >  drivers/staging/vt6655/wpactl.c |    8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
> > index 5f454ca..d75dd79 100644
> > --- a/drivers/staging/vt6655/wpactl.c
> > +++ b/drivers/staging/vt6655/wpactl.c
> > @@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
> >  	} else {
> >  		spin_unlock_irq(&pDevice->lock);
> >  		if (param->u.wpa_key.key &&
> > -		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
> > +		    copy_from_user(&abyKey[0],
> > +				   (void __user *)param->u.wpa_key.key,
> 
> Would it be better to mark this pointer as __user in the structure
> itself?  Or is it also used as a kernel structure in other places?
> 
> thanks,
> 
> greg k-h

Yes, the structure is used as a kernel structure in some other places. 
Even this function is sometimes called with the pointers in the
structure pointing to kernel memory. However, that is correctly
handled with a flag also sent to the function.

As a side note: there are some uses of memcpy in this file that
might be good to switch to copy_from/to_user but it's not as clear
to me if these pointers never can point to kernel memory (because of
the mixing of the two). For example all copying of ssid and bssid.

Cheers,
                Martin

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

* Re: [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
  2014-08-08  7:07   ` Martin Berglund
@ 2014-08-08 13:47     ` Greg Kroah-Hartman
  2014-08-08 23:55       ` Martin Berglund
  0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2014-08-08 13:47 UTC (permalink / raw)
  To: Martin Berglund; +Cc: devel, Forest Bond, linux-kernel

On Fri, Aug 08, 2014 at 09:07:55AM +0200, Martin Berglund wrote:
> On Thu, Aug 07, 2014 at 07:18:13PM -0700, Greg Kroah-Hartman wrote:
> > On Thu, Aug 07, 2014 at 11:08:34PM +0100, Martin Berglund wrote:
> > > Add missing __user macro casting in the function wpa_set_keys.
> > > This is okay since the function handles the possibility of
> > > param->u.wpa_key.key and param->u.wpa_key.seq pointing to
> > > kernelspace using a flag, fcpfkernel.
> > > 
> > > Signed-off-by: Martin Berglund <martin@rogsta.net>
> > > ---
> > > This was submitted as part of Eudyptula challenge task 16
> > > 
> > >  drivers/staging/vt6655/wpactl.c |    8 ++++++--
> > >  1 file changed, 6 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
> > > index 5f454ca..d75dd79 100644
> > > --- a/drivers/staging/vt6655/wpactl.c
> > > +++ b/drivers/staging/vt6655/wpactl.c
> > > @@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
> > >  	} else {
> > >  		spin_unlock_irq(&pDevice->lock);
> > >  		if (param->u.wpa_key.key &&
> > > -		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
> > > +		    copy_from_user(&abyKey[0],
> > > +				   (void __user *)param->u.wpa_key.key,
> > 
> > Would it be better to mark this pointer as __user in the structure
> > itself?  Or is it also used as a kernel structure in other places?
> > 
> > thanks,
> > 
> > greg k-h
> 
> Yes, the structure is used as a kernel structure in some other places. 
> Even this function is sometimes called with the pointers in the
> structure pointing to kernel memory. However, that is correctly
> handled with a flag also sent to the function.

Ugh, that's a mess.  And should be cleaned up...

> As a side note: there are some uses of memcpy in this file that
> might be good to switch to copy_from/to_user but it's not as clear
> to me if these pointers never can point to kernel memory (because of
> the mixing of the two). For example all copying of ssid and bssid.

That also is not good, if memcpy is used for userspace memory pointers,
bad things can happen on some machines...

Look at how this was fixed up in the other staging vt* driver, odds are
you can do the same thing here, right?

thanks,

greg k-h

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

* Re: [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
  2014-08-08 13:47     ` Greg Kroah-Hartman
@ 2014-08-08 23:55       ` Martin Berglund
  2014-08-10  3:36         ` Greg Kroah-Hartman
  0 siblings, 1 reply; 7+ messages in thread
From: Martin Berglund @ 2014-08-08 23:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: devel, Forest Bond, linux-kernel

On Fri, Aug 08, 2014 at 06:47:25AM -0700, Greg Kroah-Hartman wrote:
> On Fri, Aug 08, 2014 at 09:07:55AM +0200, Martin Berglund wrote:
> > On Thu, Aug 07, 2014 at 07:18:13PM -0700, Greg Kroah-Hartman wrote:
> > > On Thu, Aug 07, 2014 at 11:08:34PM +0100, Martin Berglund wrote:
> > > > Add missing __user macro casting in the function wpa_set_keys.
> > > > This is okay since the function handles the possibility of
> > > > param->u.wpa_key.key and param->u.wpa_key.seq pointing to
> > > > kernelspace using a flag, fcpfkernel.
> > > > 
> > > > Signed-off-by: Martin Berglund <martin@rogsta.net>
> > > > ---
> > > > This was submitted as part of Eudyptula challenge task 16
> > > > 
> > > >  drivers/staging/vt6655/wpactl.c |    8 ++++++--
> > > >  1 file changed, 6 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
> > > > index 5f454ca..d75dd79 100644
> > > > --- a/drivers/staging/vt6655/wpactl.c
> > > > +++ b/drivers/staging/vt6655/wpactl.c
> > > > @@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
> > > >  	} else {
> > > >  		spin_unlock_irq(&pDevice->lock);
> > > >  		if (param->u.wpa_key.key &&
> > > > -		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
> > > > +		    copy_from_user(&abyKey[0],
> > > > +				   (void __user *)param->u.wpa_key.key,
> > > 
> > > Would it be better to mark this pointer as __user in the structure
> > > itself?  Or is it also used as a kernel structure in other places?
> > > 
> > > thanks,
> > > 
> > > greg k-h
> > 
> > Yes, the structure is used as a kernel structure in some other places. 
> > Even this function is sometimes called with the pointers in the
> > structure pointing to kernel memory. However, that is correctly
> > handled with a flag also sent to the function.
> 
> Ugh, that's a mess.  And should be cleaned up...
> 
> > As a side note: there are some uses of memcpy in this file that
> > might be good to switch to copy_from/to_user but it's not as clear
> > to me if these pointers never can point to kernel memory (because of
> > the mixing of the two). For example all copying of ssid and bssid.
> 
> That also is not good, if memcpy is used for userspace memory pointers,
> bad things can happen on some machines...
> 
> Look at how this was fixed up in the other staging vt* driver, odds are
> you can do the same thing here, right?
> 
> thanks,
> 
> greg k-h

I've looked into this driver some more now. It's definitely messy but not 
as bad as I said in my previous mail. I could not find any instances where 
copy_to/from_user was needed (the pointers were actually copied arrays).

As to solving it the same way as vt6656 was solved, of some reason vt6656
has no function for ndo_do_ioctl, and therefore no need for the ioctl-part.

I just submitted a very similar patch to solve the last two address space
warnings in the vt6655 driver left after this patch.
https://lkml.org/lkml/2014/8/8/960

Cheers,
                   Martin

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

* Re: [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
  2014-08-08 23:55       ` Martin Berglund
@ 2014-08-10  3:36         ` Greg Kroah-Hartman
  2014-08-10 13:28           ` Martin Berglund
  0 siblings, 1 reply; 7+ messages in thread
From: Greg Kroah-Hartman @ 2014-08-10  3:36 UTC (permalink / raw)
  To: Martin Berglund; +Cc: devel, Forest Bond, linux-kernel

On Sat, Aug 09, 2014 at 01:55:19AM +0200, Martin Berglund wrote:
> On Fri, Aug 08, 2014 at 06:47:25AM -0700, Greg Kroah-Hartman wrote:
> > On Fri, Aug 08, 2014 at 09:07:55AM +0200, Martin Berglund wrote:
> > > On Thu, Aug 07, 2014 at 07:18:13PM -0700, Greg Kroah-Hartman wrote:
> > > > On Thu, Aug 07, 2014 at 11:08:34PM +0100, Martin Berglund wrote:
> > > > > Add missing __user macro casting in the function wpa_set_keys.
> > > > > This is okay since the function handles the possibility of
> > > > > param->u.wpa_key.key and param->u.wpa_key.seq pointing to
> > > > > kernelspace using a flag, fcpfkernel.
> > > > > 
> > > > > Signed-off-by: Martin Berglund <martin@rogsta.net>
> > > > > ---
> > > > > This was submitted as part of Eudyptula challenge task 16
> > > > > 
> > > > >  drivers/staging/vt6655/wpactl.c |    8 ++++++--
> > > > >  1 file changed, 6 insertions(+), 2 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
> > > > > index 5f454ca..d75dd79 100644
> > > > > --- a/drivers/staging/vt6655/wpactl.c
> > > > > +++ b/drivers/staging/vt6655/wpactl.c
> > > > > @@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
> > > > >  	} else {
> > > > >  		spin_unlock_irq(&pDevice->lock);
> > > > >  		if (param->u.wpa_key.key &&
> > > > > -		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
> > > > > +		    copy_from_user(&abyKey[0],
> > > > > +				   (void __user *)param->u.wpa_key.key,
> > > > 
> > > > Would it be better to mark this pointer as __user in the structure
> > > > itself?  Or is it also used as a kernel structure in other places?
> > > > 
> > > > thanks,
> > > > 
> > > > greg k-h
> > > 
> > > Yes, the structure is used as a kernel structure in some other places. 
> > > Even this function is sometimes called with the pointers in the
> > > structure pointing to kernel memory. However, that is correctly
> > > handled with a flag also sent to the function.
> > 
> > Ugh, that's a mess.  And should be cleaned up...
> > 
> > > As a side note: there are some uses of memcpy in this file that
> > > might be good to switch to copy_from/to_user but it's not as clear
> > > to me if these pointers never can point to kernel memory (because of
> > > the mixing of the two). For example all copying of ssid and bssid.
> > 
> > That also is not good, if memcpy is used for userspace memory pointers,
> > bad things can happen on some machines...
> > 
> > Look at how this was fixed up in the other staging vt* driver, odds are
> > you can do the same thing here, right?
> > 
> > thanks,
> > 
> > greg k-h
> 
> I've looked into this driver some more now. It's definitely messy but not 
> as bad as I said in my previous mail. I could not find any instances where 
> copy_to/from_user was needed (the pointers were actually copied arrays).

Ok, then should the pointer just be marked as __user instead of casting
it here?

> As to solving it the same way as vt6656 was solved, of some reason vt6656
> has no function for ndo_do_ioctl, and therefore no need for the ioctl-part.

Could it be that this function isn't needed here either?

> I just submitted a very similar patch to solve the last two address space
> warnings in the vt6655 driver left after this patch.
> https://lkml.org/lkml/2014/8/8/960

So do you think I still need to apply this patch, even after applying
your other one?

confused,

greg k-h

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

* Re: [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings
  2014-08-10  3:36         ` Greg Kroah-Hartman
@ 2014-08-10 13:28           ` Martin Berglund
  0 siblings, 0 replies; 7+ messages in thread
From: Martin Berglund @ 2014-08-10 13:28 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: devel, Forest Bond, linux-kernel

On Sat, Aug 09, 2014 at 08:36:55PM -0700, Greg Kroah-Hartman wrote:
> On Sat, Aug 09, 2014 at 01:55:19AM +0200, Martin Berglund wrote:
> > On Fri, Aug 08, 2014 at 06:47:25AM -0700, Greg Kroah-Hartman wrote:
> > > On Fri, Aug 08, 2014 at 09:07:55AM +0200, Martin Berglund wrote:
> > > > On Thu, Aug 07, 2014 at 07:18:13PM -0700, Greg Kroah-Hartman wrote:
> > > > > On Thu, Aug 07, 2014 at 11:08:34PM +0100, Martin Berglund wrote:
> > > > > > Add missing __user macro casting in the function wpa_set_keys.
> > > > > > This is okay since the function handles the possibility of
> > > > > > param->u.wpa_key.key and param->u.wpa_key.seq pointing to
> > > > > > kernelspace using a flag, fcpfkernel.
> > > > > > 
> > > > > > Signed-off-by: Martin Berglund <martin@rogsta.net>
> > > > > > ---
> > > > > > This was submitted as part of Eudyptula challenge task 16
> > > > > > 
> > > > > >  drivers/staging/vt6655/wpactl.c |    8 ++++++--
> > > > > >  1 file changed, 6 insertions(+), 2 deletions(-)
> > > > > > 
> > > > > > diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c
> > > > > > index 5f454ca..d75dd79 100644
> > > > > > --- a/drivers/staging/vt6655/wpactl.c
> > > > > > +++ b/drivers/staging/vt6655/wpactl.c
> > > > > > @@ -224,7 +224,9 @@ int wpa_set_keys(PSDevice pDevice, void *ctx,
> > > > > >  	} else {
> > > > > >  		spin_unlock_irq(&pDevice->lock);
> > > > > >  		if (param->u.wpa_key.key &&
> > > > > > -		    copy_from_user(&abyKey[0], param->u.wpa_key.key, param->u.wpa_key.key_len)) {
> > > > > > +		    copy_from_user(&abyKey[0],
> > > > > > +				   (void __user *)param->u.wpa_key.key,
> > > > > 
> > > > > Would it be better to mark this pointer as __user in the structure
> > > > > itself?  Or is it also used as a kernel structure in other places?
> > > > > 
> > > > > thanks,
> > > > > 
> > > > > greg k-h
> > > > 
> > > > Yes, the structure is used as a kernel structure in some other places. 
> > > > Even this function is sometimes called with the pointers in the
> > > > structure pointing to kernel memory. However, that is correctly
> > > > handled with a flag also sent to the function.
> > > 
> > > Ugh, that's a mess.  And should be cleaned up...
> > > 
> > > > As a side note: there are some uses of memcpy in this file that
> > > > might be good to switch to copy_from/to_user but it's not as clear
> > > > to me if these pointers never can point to kernel memory (because of
> > > > the mixing of the two). For example all copying of ssid and bssid.
> > > 
> > > That also is not good, if memcpy is used for userspace memory pointers,
> > > bad things can happen on some machines...
> > > 
> > > Look at how this was fixed up in the other staging vt* driver, odds are
> > > you can do the same thing here, right?
> > > 
> > > thanks,
> > > 
> > > greg k-h
> > 
> > I've looked into this driver some more now. It's definitely messy but not 
> > as bad as I said in my previous mail. I could not find any instances where 
> > copy_to/from_user was needed (the pointers were actually copied arrays).
> 
> Ok, then should the pointer just be marked as __user instead of casting
> it here?

No, this pointer is still used in both contexts. And as far as I know it's not 
possible to cast a __user marked variable back to kernel space without new 
warnings by sparse. I might be wrong though...

>    
> > As to solving it the same way as vt6656 was solved, of some reason vt6656
> > has no function for ndo_do_ioctl, and therefore no need for the ioctl-part.
> 
> Could it be that this function isn't needed here either?

I could not say if this function is redundant... This function is however 
linked into the module, so it is not unused in that sense.
 
> 
> > I just submitted a very similar patch to solve the last two address space
> > warnings in the vt6655 driver left after this patch.
> > https://lkml.org/lkml/2014/8/8/960
> 
> So do you think I still need to apply this patch, even after applying
> your other one?
> 
> confused,

Yes, this patch still stands. I linked the patch in relation to the discussion 
about the need to replace other memcpy in the driver. Just ignore that I
mentioned it here. Sorry for the confusion.

Cheers,
                  Martin

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

end of thread, other threads:[~2014-08-10 13:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-07 22:08 [PATCH] staging: vt6655: wpactl.c: Fix sparse warnings Martin Berglund
2014-08-08  2:18 ` Greg Kroah-Hartman
2014-08-08  7:07   ` Martin Berglund
2014-08-08 13:47     ` Greg Kroah-Hartman
2014-08-08 23:55       ` Martin Berglund
2014-08-10  3:36         ` Greg Kroah-Hartman
2014-08-10 13:28           ` Martin Berglund

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.