[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4E5F89E3.5060903@ll.mit.edu>
Date: Thu, 1 Sep 2011 09:34:27 -0400
From: "Ward, David - 0663 - MITLL" <david.ward@...mit.edu>
To: Julian Anastasov <ja@....bg>
CC: David Miller <davem@...emloft.net>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: Re: [PATCH] net: Initialize entire flowi struct
Hi Julian,
On 08/31/2011 04:51 PM, Julian Anastasov wrote:
> On Wed, 31 Aug 2011, David Ward wrote
>> The entire flowi struct needs to be initialized by afinfo->decode_session,
>> because flow_hash_code operates over the entire struct and may otherwise
>> return different hash values for what is intended to be the same key.
> Such change will cause problems for callers that
> use flowi4 in stack. Examples:
>
> ip_route_me_harder
> icmp_route_lookup
Thanks for pointing this out.
> Not sure if adding size as parameter to flow_hash_code
> is better approach. May be flow_cache_lookup needs to
> determine size from family that can be used for flow_hash_code,
> flow_key_compare and the memcpy(&fle->key, key, sizeof(*key))
> after fle = kmem_cache_alloc(flow_cachep, GFP_ATOMIC).
Makes sense to me. However should we just replace flow_key_compare with
memcmp then, since the assumptions about constant size and alignment
will no longer apply? Or should there be a separate flow_key_compare
function for each family, and have all of the flowi* structures become
__attribute__((__aligned__(BITS_PER_LONG/8))) ?
David
> The question is how to get size by family.
>
>> Signed-off-by: David Ward<david.ward@...mit.edu>
>> ---
>> net/ipv4/xfrm4_policy.c | 2 +-
>> net/ipv6/xfrm6_policy.c | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c
>> index fc5368a..afce24d 100644
>> --- a/net/ipv4/xfrm4_policy.c
>> +++ b/net/ipv4/xfrm4_policy.c
>> @@ -114,7 +114,7 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse)
>> u8 *xprth = skb_network_header(skb) + iph->ihl * 4;
>> struct flowi4 *fl4 =&fl->u.ip4;
>>
>> - memset(fl4, 0, sizeof(struct flowi4));
>> + memset(fl, 0, sizeof(struct flowi));
>> fl4->flowi4_mark = skb->mark;
>>
>> if (!ip_is_fragment(iph)) {
>> diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
>> index d879f7e..9088d38 100644
>> --- a/net/ipv6/xfrm6_policy.c
>> +++ b/net/ipv6/xfrm6_policy.c
>> @@ -129,7 +129,7 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
>> const unsigned char *nh = skb_network_header(skb);
>> u8 nexthdr = nh[IP6CB(skb)->nhoff];
>>
>> - memset(fl6, 0, sizeof(struct flowi6));
>> + memset(fl, 0, sizeof(struct flowi));
>> fl6->flowi6_mark = skb->mark;
>>
>> ipv6_addr_copy(&fl6->daddr, reverse ?&hdr->saddr :&hdr->daddr);
>> --
>> 1.7.4.1
Download attachment "smime.p7s" of type "application/pkcs7-signature" (4184 bytes)
Powered by blists - more mailing lists