From: Eric Dumazet <dada1@cosmosbay.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Subject: Re: [RFC] Question about potential problem in net/ipv4/route.c
Date: Thu, 12 Oct 2006 07:48:20 +0200 [thread overview]
Message-ID: <452DD724.4030502@cosmosbay.com> (raw)
In-Reply-To: <20061011.220506.76273501.davem@davemloft.net>
David Miller a écrit :
> From: Eric Dumazet <dada1@cosmosbay.com>
> Date: Wed, 11 Oct 2006 15:11:18 +0200
>
>> Using memcmp(ptr1, ptr2, sizeof(SOMEFIELD)) is dangerous because
>> sizeof(SOMEFIELD) can be larger than the underlying object, because of
>> alignment constraints.
>>
>> In this case, sizeof(fl1->nl_u.ip4_u) is 16, while fl1->nl_u.ip4_u is :
>>
>> struct {
>> __u32 daddr;
>> __u32 saddr;
>> __u32 fwmark;
>> __u8 tos;
>> __u8 scope;
>> } ip4_u;
>>
>> So 14 bytes are really initialized, and 2 padding bytes might contain random
>> values...
>
> We always explicitly initialize the flows, and even for local stack
> assignment based initialization, gcc zeros out the padding bytes
> always. For non-stack-local cases we do explicit memset()'s over the
> entire object. So I think while not perfect, we're very much safe
> here.
>
Not on my gcc here (gcc version 3.4.4) : It wont zeros out the padding bytes
# cat bug.c
struct s1 {
long d;
char c;
};
void bar()
{
struct s1 s = { .d = 123, .c = 'a'};
foo(&s, sizeof(s));
}
# gcc -O2 -S bug.c
# more bug.s
.globl bar
.type bar, @function
bar:
.LFB2:
subq $24, %rsp
.LCFI0:
movl $16, %esi
xorl %eax, %eax
movq %rsp, %rdi
movq $123, (%rsp)
movb $97, 8(%rsp)
call foo
addq $24, %rsp
ret
So 9(%rsp) -> 15(%rsp) are not initialized
Same on more recent gcc (4.1.1)
>> fast comparison, we should do some clever long/int XOR operations to avoid
>> many test/branches, like the optim we did in compare_ether_addr())
>>
>> As shown in profiles, "repz cmpsb" is really a dog... (and its use of
>> esi/edi/ecx registers a high pressure for the compiler/optimizer)
>
> Yes, for the fast comparisons it is almost certainly worth it to do
> something saner in compare_keys().
>
> But looking at this further, compare_keys() is only used in hotpath
> situations where we are optimizing for a miss, such as during hash
> insert. The optimization therefore might be less justified as a
> result.
Well, on this machine I have these oprofile numbers :
<rt_intern_hash>: /* rt_intern_hash total: 993464 0.3619 */
31751 0.0116 :ffffffff803e8d26: repz cmpsb %es:(%rdi),%ds:(%rsi)
433438 0.1579 :ffffffff803e8d28: jne ffffffff803e8f80 <rt_intern_hash+0x310>
Eric
next prev parent reply other threads:[~2006-10-12 5:48 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-09 17:47 Dropping NETIF_F_SG since no checksum feature Michael S. Tsirkin
2006-10-09 16:50 ` Stephen Hemminger
2006-10-09 16:50 ` Stephen Hemminger
2006-10-10 14:43 ` Michael S. Tsirkin
2006-10-10 17:43 ` Stephen Hemminger
2006-10-11 0:13 ` Michael S. Tsirkin
2006-10-11 0:15 ` Roland Dreier
2006-10-11 0:26 ` Michael S. Tsirkin
2006-10-11 3:33 ` Roland Dreier
2006-10-11 3:36 ` David Miller
2006-10-11 3:42 ` Roland Dreier
2006-10-11 3:45 ` David Miller
2006-10-11 3:49 ` Roland Dreier
2006-10-11 3:50 ` David Miller
2006-10-11 2:15 ` David Miller
2006-10-11 9:05 ` Michael S. Tsirkin
2006-10-11 9:05 ` Michael S. Tsirkin
2006-10-11 9:09 ` Steven Whitehouse
2006-10-11 15:01 ` Michael S. Tsirkin
2006-10-11 20:11 ` Steven Whitehouse
2006-10-11 20:52 ` Michael S. Tsirkin
2006-10-11 20:57 ` Stephen Hemminger
2006-10-11 21:23 ` Michael S. Tsirkin
2006-10-11 21:23 ` Michael S. Tsirkin
2006-10-11 21:29 ` Stephen Hemminger
2006-10-11 21:42 ` Michael S. Tsirkin
2006-10-11 21:41 ` David Miller
2006-10-12 19:12 ` Michael S. Tsirkin
2006-10-12 19:12 ` Michael S. Tsirkin
2006-10-13 4:22 ` David Miller
2006-10-13 6:17 ` Michael S. Tsirkin
2006-10-11 20:52 ` David Miller
2006-10-11 20:52 ` David Miller
2006-10-11 21:11 ` Michael S. Tsirkin
2006-10-11 21:11 ` Michael S. Tsirkin
2006-10-11 9:20 ` David Miller
2006-10-11 9:46 ` Michael S. Tsirkin
2006-10-11 18:21 ` [openib-general] " Michael Krause
2006-10-11 13:11 ` [RFC] Question about potential problem in net/ipv4/route.c Eric Dumazet
2006-10-12 5:05 ` David Miller
2006-10-12 5:31 ` Patrick McHardy
2006-10-12 5:54 ` David Miller
2006-10-12 5:48 ` Eric Dumazet [this message]
2006-10-12 6:02 ` David Miller
2006-10-12 6:10 ` Patrick McHardy
2006-10-12 6:25 ` David Miller
2006-10-12 6:35 ` Eric Dumazet
2006-10-12 7:48 ` David Miller
2006-10-16 9:00 ` [PATCH] NET : Suspicious locking in reqsk_queue_hash_req() Eric Dumazet
2006-10-16 9:07 ` Eric Dumazet
2006-10-16 16:16 ` Arnaldo Carvalho de Melo
2006-10-16 16:56 ` Eric Dumazet
2006-10-16 17:39 ` Eric Dumazet
2006-10-16 20:41 ` David Miller
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=452DD724.4030502@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=davem@davemloft.net \
--cc=netdev@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 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.