Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1535101 > unrolled thread

[PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

Started byQuentin Lambert <lambert.quentin@gmail.com>
First post2016-12-02 18:40 +0100
Last post2016-12-07 18:30 +0100
Articles 12 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space Quentin Lambert <lambert.quentin@gmail.com> - 2016-12-02 18:40 +0100
    Re: [PATCH] staging: lustre: Fix a spatch warning due to an  assignment from kernel to user space Dan Carpenter <dan.carpenter@oracle.com> - 2016-12-05 22:00 +0100
    Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space Oleg Drokin <oleg.drokin@intel.com> - 2016-12-06 00:00 +0100
      Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due  to an assignment from kernel to user space Quentin Lambert <lambert.quentin@gmail.com> - 2016-12-06 15:00 +0100
        Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due  to an assignment from kernel to user space Quentin Lambert <lambert.quentin@gmail.com> - 2016-12-07 16:30 +0100
          Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due  to an assignment from kernel to user space Dan Carpenter <dan.carpenter@oracle.com> - 2016-12-07 16:40 +0100
            Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due  to an assignment from kernel to user space Quentin Lambert <lambert.quentin@gmail.com> - 2016-12-07 16:50 +0100
              Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due  to an assignment from kernel to user space Dan Carpenter <dan.carpenter@oracle.com> - 2016-12-07 20:30 +0100
                Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning  due to an assignment from kernel to user space James Simmons <jsimmons@infradead.org> - 2016-12-07 21:00 +0100
            Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space Oleg Drokin <oleg.drokin@intel.com> - 2016-12-07 18:20 +0100
          Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due  to an assignment from kernel to user space Dan Carpenter <dan.carpenter@oracle.com> - 2016-12-07 16:40 +0100
          Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space Oleg Drokin <oleg.drokin@intel.com> - 2016-12-07 18:30 +0100

#1535101 — [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromQuentin Lambert <lambert.quentin@gmail.com>
Date2016-12-02 18:40 +0100
Subject[PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sJZYt-6OX-17@gated-at.bofh.it>
lnet_ipif_enumerate was assigning a pointer from kernel space to user
space. This patch uses copy_to_user to properly do that assignment.

Signed-off-by: Quentin Lambert <lambert.quentin@gmail.com>
---
 shouldn't we be using ifc_req instead of ifc_buf?

 drivers/staging/lustre/lnet/lnet/lib-socket.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- a/drivers/staging/lustre/lnet/lnet/lib-socket.c
+++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c
@@ -181,7 +181,13 @@ lnet_ipif_enumerate(char ***namesp)
 			goto out0;
 		}
 
-		ifc.ifc_buf = (char *)ifr;
+		rc = copy_to_user(ifc.ifc_buf, (char *)ifr,
+				  nalloc * sizeof(*ifr));
+		if (rc) {
+			rc = -ENOMEM;
+			goto out1;
+		}
+
 		ifc.ifc_len = nalloc * sizeof(*ifr);
 
 		rc = lnet_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc);

[toc] | [next] | [standalone]


#1536412 — Re: [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromDan Carpenter <dan.carpenter@oracle.com>
Date2016-12-05 22:00 +0100
SubjectRe: [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sL8wG-Xr-21@gated-at.bofh.it>
In reply to#1535101
On Fri, Dec 02, 2016 at 06:33:32PM +0100, Quentin Lambert wrote:
> lnet_ipif_enumerate was assigning a pointer from kernel space to user
> space. This patch uses copy_to_user to properly do that assignment.

Put the exact warning message here.

> 
> Signed-off-by: Quentin Lambert <lambert.quentin@gmail.com>
> ---
>  shouldn't we be using ifc_req instead of ifc_buf?
> 
>  drivers/staging/lustre/lnet/lnet/lib-socket.c |    8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c
> +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c
> @@ -181,7 +181,13 @@ lnet_ipif_enumerate(char ***namesp)
>  			goto out0;
>  		}
>  
> -		ifc.ifc_buf = (char *)ifr;
> +		rc = copy_to_user(ifc.ifc_buf, (char *)ifr,
> +				  nalloc * sizeof(*ifr));
> +		if (rc) {
> +			rc = -ENOMEM;
> +			goto out1;
> +		}


No idea what's going on here.  The original code is correct.

regards,
dan carpenter

[toc] | [prev] | [next] | [standalone]


#1536508 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromOleg Drokin <oleg.drokin@intel.com>
Date2016-12-06 00:00 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLaoN-2aw-11@gated-at.bofh.it>
In reply to#1535101
On Dec 2, 2016, at 12:33 PM, Quentin Lambert wrote:

> lnet_ipif_enumerate was assigning a pointer from kernel space to user
> space. This patch uses copy_to_user to properly do that assignment.

I guess it's a false positive?

While lnet_sock_ioctl()->kernel_sock_unlocked_ioctl() does call into the
f_op->unlocked_ioctl() with a userspace argument, note that we have
set_fs(KERNEL_DS); in there, therefore allowig copy_from_user
and friends to work on kernel data too as if it was userspace.
(I know it's ugly and we need to find a better way of getting this data,
but at least it's not incorrect).

> 
> Signed-off-by: Quentin Lambert <lambert.quentin@gmail.com>
> ---
> shouldn't we be using ifc_req instead of ifc_buf?
> 
> drivers/staging/lustre/lnet/lnet/lib-socket.c |    8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
> 
> --- a/drivers/staging/lustre/lnet/lnet/lib-socket.c
> +++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c
> @@ -181,7 +181,13 @@ lnet_ipif_enumerate(char ***namesp)
> 			goto out0;
> 		}
> 
> -		ifc.ifc_buf = (char *)ifr;
> +		rc = copy_to_user(ifc.ifc_buf, (char *)ifr,
> +				  nalloc * sizeof(*ifr));
> +		if (rc) {
> +			rc = -ENOMEM;
> +			goto out1;
> +		}
> +
> 		ifc.ifc_len = nalloc * sizeof(*ifr);
> 
> 		rc = lnet_sock_ioctl(SIOCGIFCONF, (unsigned long)&ifc);
> _______________________________________________
> lustre-devel mailing list
> lustre-devel@lists.lustre.org
> http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org

[toc] | [prev] | [next] | [standalone]


#1536989 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromQuentin Lambert <lambert.quentin@gmail.com>
Date2016-12-06 15:00 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLorL-2IR-13@gated-at.bofh.it>
In reply to#1536508

On 12/05/2016 11:58 PM, Oleg Drokin wrote:
> I guess it's a false positive?
Yes, probably.

Thank you for the explanation though, I don't fully understand all this yet,
I am still learning.

Sorry for the noise.

Quentin

[toc] | [prev] | [next] | [standalone]


#1537832 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromQuentin Lambert <lambert.quentin@gmail.com>
Date2016-12-07 16:30 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLMkp-1Oz-3@gated-at.bofh.it>
In reply to#1536989
Hi all,

I am looking at the drivers/staging/lustre/lustre/llite/dir.c:

1469                 /* Call mdc_iocontrol */
1470                 rc = obd_iocontrol(LL_IOC_FID2MDTIDX, exp, 
sizeof(fid), &fid,
1471                                    &index);
1472                 if (rc)

and sparse says:

drivers/staging/lustre/lustre/llite/dir.c:1471:37: warning: incorrect 
type in argument 5 (different address spaces)

I was wondering if there was any value to add a cast to fix the warning?
And I guess this solution would also apply in my original patch to

drivers/staging/lustre/lnet/lnet/lib-socket.c

Quentin

[toc] | [prev] | [next] | [standalone]


#1537843 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromDan Carpenter <dan.carpenter@oracle.com>
Date2016-12-07 16:40 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLMu5-1RI-7@gated-at.bofh.it>
In reply to#1537832
Lustre is kind of a mess with regards to keeping user and kernel
pointers separate.  It's not going to be easy to fix.

regards,
dan carpenter

[toc] | [prev] | [next] | [standalone]


#1537853 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromQuentin Lambert <lambert.quentin@gmail.com>
Date2016-12-07 16:50 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLMDL-1V4-19@gated-at.bofh.it>
In reply to#1537843

On 12/07/2016 04:33 PM, Dan Carpenter wrote:
> Lustre is kind of a mess with regards to keeping user and kernel
> pointers separate.  It's not going to be easy to fix.
Fair enough.
I am trying to make a contribution to drivers/staging using sparse.
With that in mind, do you still fill I should keep clear of lustre?
I feel that actually doing the work properly could be a meaningful
learning experience.

I start to understand now, that what I was proposing before was
more of a hack than a solution and would have resulted in hiding
meaningful infos.

Quentin

[toc] | [prev] | [next] | [standalone]


#1538027 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromDan Carpenter <dan.carpenter@oracle.com>
Date2016-12-07 20:30 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLQ4G-4cm-11@gated-at.bofh.it>
In reply to#1537853
On Wed, Dec 07, 2016 at 04:42:30PM +0100, Quentin Lambert wrote:
> 
> 
> On 12/07/2016 04:33 PM, Dan Carpenter wrote:
> >Lustre is kind of a mess with regards to keeping user and kernel
> >pointers separate.  It's not going to be easy to fix.
> Fair enough.
> I am trying to make a contribution to drivers/staging using sparse.
> With that in mind, do you still fill I should keep clear of lustre?
> I feel that actually doing the work properly could be a meaningful
> learning experience.

It's just that you're the fifth person to look at lustre __user
annotations and it doesn't end well.  You need to be a lustre expert
who can test things.

But for other lustre things, feel free.

regards,
dan carpenter

[toc] | [prev] | [next] | [standalone]


#1538039 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromJames Simmons <jsimmons@infradead.org>
Date2016-12-07 21:00 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLQxH-4mc-1@gated-at.bofh.it>
In reply to#1538027
> > On 12/07/2016 04:33 PM, Dan Carpenter wrote:
> > >Lustre is kind of a mess with regards to keeping user and kernel
> > >pointers separate.  It's not going to be easy to fix.
> > Fair enough.
> > I am trying to make a contribution to drivers/staging using sparse.
> > With that in mind, do you still fill I should keep clear of lustre?
> > I feel that actually doing the work properly could be a meaningful
> > learning experience.
> 
> It's just that you're the fifth person to look at lustre __user
> annotations and it doesn't end well.  You need to be a lustre expert
> who can test things.
> 
> But for other lustre things, feel free.

Actually we are working to fix this issue. We are working on a 
process that lustre patch posted here get sucked up and put
into our test harness automatically. It needs more love but its
coming along.

[toc] | [prev] | [next] | [standalone]


#1537942 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromOleg Drokin <oleg.drokin@intel.com>
Date2016-12-07 18:20 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLO2S-2Y5-25@gated-at.bofh.it>
In reply to#1537843
On Dec 7, 2016, at 10:33 AM, Dan Carpenter wrote:

> Lustre is kind of a mess with regards to keeping user and kernel
> pointers separate.  It's not going to be easy to fix.

Actually I believe I made significant inroads in properly cleaning (almost?) everything
in this area about a year ago (to the point that only false positives were left).
I guess some more stuff crept in, I'll just make another run through and see
what else I can improve.

[toc] | [prev] | [next] | [standalone]


#1537847 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromDan Carpenter <dan.carpenter@oracle.com>
Date2016-12-07 16:40 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLMu6-1RI-29@gated-at.bofh.it>
In reply to#1537832
On Wed, Dec 07, 2016 at 04:20:06PM +0100, Quentin Lambert wrote:
> Hi all,
> 
> I am looking at the drivers/staging/lustre/lustre/llite/dir.c:
> 
> 1469                 /* Call mdc_iocontrol */
> 1470                 rc = obd_iocontrol(LL_IOC_FID2MDTIDX, exp,
> sizeof(fid), &fid,
> 1471                                    &index);
> 1472                 if (rc)
> 
> and sparse says:
> 
> drivers/staging/lustre/lustre/llite/dir.c:1471:37: warning:
> incorrect type in argument 5 (different address spaces)
> 
> I was wondering if there was any value to add a cast to fix the warning?
> And I guess this solution would also apply in my original patch to
> 
> drivers/staging/lustre/lnet/lnet/lib-socket.c

Just leave these alone until someone can come clean it up properly.

Warnings are good!  People have spent years and years to create
programs to print warnings.  Don't silence the warning by adding a cast.
The warning means show that the code is dangerous.

regards,
dan carpenter

[toc] | [prev] | [next] | [standalone]


#1537948 — Re: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space

FromOleg Drokin <oleg.drokin@intel.com>
Date2016-12-07 18:30 +0100
SubjectRe: [lustre-devel] [PATCH] staging: lustre: Fix a spatch warning due to an assignment from kernel to user space
Message-ID<sLOcy-31p-17@gated-at.bofh.it>
In reply to#1537832
On Dec 7, 2016, at 10:20 AM, Quentin Lambert wrote:

> Hi all,
> 
> I am looking at the drivers/staging/lustre/lustre/llite/dir.c:
> 
> 1469                 /* Call mdc_iocontrol */
> 1470                 rc = obd_iocontrol(LL_IOC_FID2MDTIDX, exp, sizeof(fid), &fid,
> 1471                                    &index);
> 1472                 if (rc)
> 
> and sparse says:
> 
> drivers/staging/lustre/lustre/llite/dir.c:1471:37: warning: incorrect type in argument 5 (different address spaces)
> 
> I was wondering if there was any value to add a cast to fix the warning?

These's a sister warning to this one, btw, in
drivers/staging/lustre/lustre/lmv/lmv_obd.c:996:19: warning: cast removes address space of expression

It is an ugly kludge and I guess needs to just be reworked somehow instead to avoid
these ugly games.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web