From: Andi Kleen <ak@suse.de>
To: Dawson Engler <engler@csl.Stanford.EDU>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [CHECKER] amusing copy_from_user bug
Date: Tue, 10 Apr 2001 14:20:42 +0200 [thread overview]
Message-ID: <20010410142042.A15540@gruyere.muc.suse.de> (raw)
In-Reply-To: <200104101011.DAA29579@csl.Stanford.EDU>
In-Reply-To: <200104101011.DAA29579@csl.Stanford.EDU>; from engler@csl.Stanford.EDU on Tue, Apr 10, 2001 at 03:11:05AM -0700
On Tue, Apr 10, 2001 at 03:11:05AM -0700, Dawson Engler wrote:
> segment = kmalloc((sizeof(agp_segment) * reserve.seg_count),
> GFP_KERNEL);
>
> if (segment == NULL) {
> return -ENOMEM;
> }
> if (copy_from_user(segment, (void *) reserve.seg_list,
> GFP_KERNEL)) {
> kfree(segment);
> return -EFAULT;
> }
>
> As a side question: is it still true that verify_area's must be done before
> any use of __put_user/__get_user/__copy_from_user/etc?
I must be done in front of __*_user, but in front of [^_][^_]*_user it's not needed
anymore because they include an access_ok() hit.
If you would check this there would be false hits, because a lot of code
does tricks like sharing it between a __copy_from_user and a __copy_to_user
(legal but slightly hackish). access_ok() instead of verify_area is also ok.
__*_user without verify_area/access_ok is usually a bug and a security hole.
There is also some code that does the verify_area/access_ok only for the beginning
of a structure, and then hopes that the structure is known-length bound and
that non verify_area checked accesses behind the first element get catched by
an architecture specific memory hole after PAGE_OFFSET (nasty trick, should
only occur in arch/*/*, e.g. on i386 it's incorrect).
BTW another common mistake is to directly return the value of copy_{from,to}_user
directly as an error. Unlike {get,put}_user they do not return an error code, but
the number of uncopied bytes. There is unfortunately some code that uses this
internally as return, but e.g. if you could check in CHECKER if a function that
ever returns -E<something> returns the value of copy_{from,to}_user directly it would
probably catch quite a few bugs (at least I found quite a bit of them in the past).
-Andi
prev parent reply other threads:[~2001-04-10 12:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-04-10 10:11 Dawson Engler
2001-04-10 10:41 ` Jakub Jelinek
2001-04-10 10:59 ` Petru Paler
2001-04-10 18:07 ` David S. Miller
2001-04-10 12:20 ` Andi Kleen [this message]
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=20010410142042.A15540@gruyere.muc.suse.de \
--to=ak@suse.de \
--cc=engler@csl.Stanford.EDU \
--cc=linux-kernel@vger.kernel.org \
/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®