From: Cong Wang <amwang@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [Patch] net: fix an array index overflow
Date: Tue, 01 Dec 2009 16:56:33 +0800 [thread overview]
Message-ID: <4B14DA41.50202@redhat.com> (raw)
In-Reply-To: <4B14D878.1070802@gmail.com>
Eric Dumazet wrote:
> Amerigo Wang a écrit :
>> Don't use the address of an out-of-boundary element.
>>
>> Maybe this is not harmful at runtime, but it is still
>> good to improve it.
>
> Why ?
>
> for (ptr = start; ptr < end; ptr++) {}
>
> is valid, even if 'end' is 'outside of bounds'
>
> It also works if start == end.
I knew it's valid, that is why I said it's "not harmful".
>
>> Signed-off-by: WANG Cong <amwang@redhat.com>
>> Cc: David S. Miller <davem@davemloft.net>
>>
>> ---
>> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
>> index 57737b8..2669361 100644
>> --- a/net/ipv4/af_inet.c
>> +++ b/net/ipv4/af_inet.c
>> @@ -1586,7 +1586,7 @@ static int __init inet_init(void)
>> #endif
>>
>> /* Register the socket-side information for inet_create. */
>> - for (r = &inetsw[0]; r < &inetsw[SOCK_MAX]; ++r)
>> + for (r = &inetsw[0]; r <= &inetsw[SOCK_MAX-1]; ++r)
>> INIT_LIST_HEAD(r);
>>
>> for (q = inetsw_array; q < &inetsw_array[INETSW_ARRAY_LEN]; ++q)
>> --
>
> I wonder why you want to 'fix' this loop and let following loop unchanged...
>
> for (q = inetsw_array; q < &inetsw_array[INETSW_ARRAY_LEN]; ++q)
> inet_register_protosw(q);
>
Oh, I didn't catch it.
> If this really hurts your eyes, why not using basic loops ?
Yes, definitely this one is better.
Ack.
>
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index 7d12c6a..476cda7 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -1540,8 +1540,7 @@ static struct packet_type ip_packet_type __read_mostly = {
> static int __init inet_init(void)
> {
> struct sk_buff *dummy_skb;
> - struct inet_protosw *q;
> - struct list_head *r;
> + int i;
> int rc = -EINVAL;
>
> BUILD_BUG_ON(sizeof(struct inet_skb_parm) > sizeof(dummy_skb->cb));
> @@ -1584,11 +1583,11 @@ static int __init inet_init(void)
> #endif
>
> /* Register the socket-side information for inet_create. */
> - for (r = &inetsw[0]; r < &inetsw[SOCK_MAX]; ++r)
> - INIT_LIST_HEAD(r);
> + for (i = 0; i < SOCK_MAX; i++)
> + INIT_LIST_HEAD(&inetsw[i]);
>
> - for (q = inetsw_array; q < &inetsw_array[INETSW_ARRAY_LEN]; ++q)
> - inet_register_protosw(q);
> + for (i = 0; i < INETSW_ARRAY_LEN; i++)
> + inet_register_protosw(&inetsw_array[i]);
>
> /*
> * Set the ARP module up
next prev parent reply other threads:[~2009-12-01 8:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-01 8:26 [Patch] net: fix an array index overflow Amerigo Wang
2009-12-01 8:48 ` Eric Dumazet
2009-12-01 8:56 ` Cong Wang [this message]
2009-12-01 16:05 ` David Wagner
2009-12-02 13:24 ` Dan Carpenter
2009-12-03 8:30 ` Cong Wang
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=4B14DA41.50202@redhat.com \
--to=amwang@redhat.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--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.