From: ebiederm@xmission.com (Eric W. Biederman)
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] i386: Add a temporary to make put_user more type safe.
Date: Sat, 28 Jan 2006 23:49:32 -0700 [thread overview]
Message-ID: <m17j8jfs03.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <20060128223917.4e5c3dd9.akpm@osdl.org> (Andrew Morton's message of "Sat, 28 Jan 2006 22:39:17 -0800")
Andrew Morton <akpm@osdl.org> writes:
> ebiederm@xmission.com (Eric W. Biederman) wrote:
>>
>>
>> In some code I am developing I had occasion to change the type of a
>> variable. This made the value put_user was putting to user space
>> wrong. But the code continued to build cleanly without errors.
>
> What do you mean by "wrong"? What combinations of types do you think
> should be disallowed here? put_user(char, int*), for example, or what?
>
> We had one instance recently where code was doing put_user() of an
> eight-byte struct and that sailed through x86 testing but made the sparc64
> compiler ICE. Certainly we should stamp out tricks like that at compile
> time, but how far should we go?
>
> There's probably a good case for ensuring that typeof(x)==typeof(*ptr), but
> I suspect that'd create a lot of noise.
All I do is ensure that typeof(x) is assignment compatible with typeof(*ptr).
That is what the assignment to the temporary does. We actually do
this already on x86 if you compile for an i386 which people very rarely
do anymore.
I have performed sever kernel compiles with it applied against the stable
tree and saw no errors other than when I tried to assign a pointer to an
integer using put_user.
So your eight-byte struct case would probably be caught but the character
case would get type promoted and be fine.
>> Introducing a temporary fixes this problem and at least with gcc-3.3.5
>> does not cause gcc any problems with optimizing out the temporary.
>> gcc-4.x using SSA internally ought to be even better at optimizing out
>> temporaries, so I don't expect a temporary to become a problem.
>> Especially because in all correct cases the types on both sides of the
>> assignment to the temporary are the same.
>>
>
> Sounds sane. We could make it warn if typeof(x)!=typeof(*ptr) by adding
> another temporary for the pointer, give it type typeof(x)*, but I haven't
> tried it.
I guess we could do that. However if we don't use the value we will probably
get an unused variable warning.
Mostly I am just after the normal C assignment warnings/errors. Although if
we can do better that would be great.
Eric
next prev parent reply other threads:[~2006-01-29 6:50 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-29 6:26 Eric W. Biederman
2006-01-29 6:39 ` Andrew Morton
2006-01-29 6:49 ` Eric W. Biederman [this message]
2006-01-29 7:51 ` Andrew Morton
[not found] ` <200601291620.28291.ioe-lkml@rameria.de>
2006-01-29 19:33 ` Andrew Morton
2006-01-29 20:04 ` [PATCH] i386: instead of poisoning .init zone, change protection bits to force a fault Eric Dumazet
2006-01-29 20:05 ` Benjamin LaHaise
2006-01-29 20:28 ` Eric Dumazet
2006-01-29 20:56 ` [PATCH, V2] " Eric Dumazet
2006-01-30 9:03 ` Questions about alloc_large_system_hash() and TLB entries Eric Dumazet
2006-01-30 9:22 ` David S. Miller
2006-01-30 10:22 ` Eric Dumazet
2006-02-04 22:41 ` [PATCH, V2] i386: instead of poisoning .init zone, change protection bits to force a fault Andrew Morton
2006-02-05 17:03 ` Eric Dumazet
2006-02-05 19:42 ` Andrew Morton
2006-02-06 8:53 ` Eric Dumazet
2006-02-06 9:02 ` Eric Dumazet
2006-02-06 9:28 ` Andrew Morton
2006-02-06 10:07 ` Eric Dumazet
2006-02-06 10:16 ` Andrew Morton
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=m17j8jfs03.fsf@ebiederm.dsl.xmission.com \
--to=ebiederm@xmission.com \
--cc=akpm@osdl.org \
--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
Powered by JetHome