All of lore.kernel.org
 help / color / mirror / Atom feed
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




  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.