mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@osdl.org>
To: "Robert T. Johnson" <rtjohnso@eecs.berkeley.edu>
Cc: Al Viro <viro@math.psu.edu>, Linux Kernel <linux-kernel@vger.kernel.org>
Subject: Re: Finding user/kernel pointer bugs [no html]
Date: Thu, 10 Jun 2004 07:46:40 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.58.0406100735530.2050@ppc970.osdl.org> (raw)
In-Reply-To: <1086842898.32053.380.camel@dooby.cs.berkeley.edu>



On Wed, 9 Jun 2004, Robert T. Johnson wrote:
> 
> QUESTION:  Do you find it's difficult to figure out which fields of
> structures should be declared __user?

It's _usually_ trivial, by just looking at the warnings. 

Not always, though. We don't have a "taint" attribute (I've been thinking 
about it, but I don't feel the pain has been worth it yet), so if you do 
load a structure from user space (properly, with copy_from_user()) and 
then use a non-annotated part of that as a pointer and dereference it 
directly, sparse won't warn, of course. 

However, that requires that _every_ single user of that attribute member 
mis-uses the pointer (ie that "get_user()" never sees that pointer at 
all)). So that case is fairly unlikely, although it can (and probably 
does) happen for the unusual stuff.

The much harder issue is structures that soemtimes contain user pointers,
and sometime contain kernel pointers. Those sparse can't handle at all,
since sparse does purely local and static type-checking. It will complain
about one or the other.

The only way to fix the second case is to split the structure up - which
is usually a good idea _anyway_, but which can sometimes be pretty 
painful. Al has done some of them. The really painful one is "struct 
iovec", which seems to be used in this capacity a fair amount.

> If a structure pointer is __user, but it has some pointer fields that
> aren't declared __user, there's a good chance that there's a missing
> annotation or something.

Yes. That's likely a good heuristic.

			Linus

  reply	other threads:[~2004-06-10 14:48 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-10  3:31 Robert T. Johnson
2004-06-10  4:10 ` Linus Torvalds
2004-06-10  4:48   ` Robert T. Johnson
2004-06-10 14:46     ` Linus Torvalds [this message]
2004-06-10 16:57       ` viro
2004-06-10 15:07   ` Timothy Miller
2004-06-10 15:04     ` Linus Torvalds
2004-06-10 15:26       ` Timothy Miller
2004-06-10  4:49 ` viro
2004-06-10  5:20   ` Robert T. Johnson
2004-06-10 16:58   ` Greg KH
2004-06-10 17:27     ` David Brownell
2004-06-10 17:35       ` Greg KH
2004-06-10 17:54     ` Thomas Sailer
2004-06-10 18:34     ` Greg KH
2004-06-10 18:45       ` viro
2004-06-10 18:54         ` Greg KH
2004-06-10 19:10     ` Greg KH
2004-06-10 19:14       ` viro
2004-06-10 19:32         ` Greg KH
2004-06-10 19:38           ` viro
2004-06-10 20:28           ` Sam Ravnborg
2004-06-10 20:48             ` Randy.Dunlap
2004-06-11 17:21       ` Jean Delvare
2004-06-11 17:59         ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.58.0406100735530.2050@ppc970.osdl.org \
    --to=torvalds@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rtjohnso@eecs.berkeley.edu \
    --cc=viro@math.psu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®