From: Jakub Sitnicki <jakub@cloudflare.com>
To: Stanislav Fomichev <sdf@google.com>
Cc: Netdev <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
David Miller <davem@davemloft.net>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>
Subject: Re: [PATCH bpf] selftests/bpf: fix v4_to_v6 in sk_lookup
Date: Mon, 10 Aug 2020 22:30:39 +0200 [thread overview]
Message-ID: <87sgcus0pc.fsf@cloudflare.com> (raw)
In-Reply-To: <CAKH8qBswCOU6oK2rLkUADRF-NUgwcHB-MyWNV+ug_cLRxnQBeQ@mail.gmail.com>
On Mon, Aug 10, 2020 at 06:14 PM CEST, Stanislav Fomichev wrote:
> On Sat, Aug 8, 2020 at 11:46 AM Jakub Sitnicki <jakub@cloudflare.com> wrote:
>>
>> On Sat, Aug 08, 2020 at 12:38 AM CEST, Stanislav Fomichev wrote:
>> > I'm getting some garbage in bytes 8 and 9 when doing conversion
>> > from sockaddr_in to sockaddr_in6 (leftover from AF_INET?).
>> > Let's explicitly clear the higher bytes.
>> >
>> > Signed-off-by: Stanislav Fomichev <sdf@google.com>
>> > ---
>> > tools/testing/selftests/bpf/prog_tests/sk_lookup.c | 1 +
>> > 1 file changed, 1 insertion(+)
>> >
>> > diff --git a/tools/testing/selftests/bpf/prog_tests/sk_lookup.c b/tools/testing/selftests/bpf/prog_tests/sk_lookup.c
>> > index c571584c00f5..9ff0412e1fd3 100644
>> > --- a/tools/testing/selftests/bpf/prog_tests/sk_lookup.c
>> > +++ b/tools/testing/selftests/bpf/prog_tests/sk_lookup.c
>> > @@ -309,6 +309,7 @@ static void v4_to_v6(struct sockaddr_storage *ss)
>> > v6->sin6_addr.s6_addr[10] = 0xff;
>> > v6->sin6_addr.s6_addr[11] = 0xff;
>> > memcpy(&v6->sin6_addr.s6_addr[12], &v4.sin_addr.s_addr, 4);
>> > + memset(&v6->sin6_addr.s6_addr[0], 0, 10);
>> > }
>> >
>> > static int udp_recv_send(int server_fd)
>>
>> That was badly written. Sorry about that. And thanks for the fix.
>>
>> I'd even zero out the whole thing:
>>
>> memset(v6, 0, sizeof(*v6));
>>
>> ... because right now IPv4 address is left as sin6_flowinfo. I can
>> follow up with that change, unless you'd like to roll a v2.
> Up to you, but I'm not sure zeroing out the whole v6 portion is the
> best way forward.
> IMO, it's a bit confusing when reading the code.
> It will work, but only because v4 and v6 address portions don't really
> overlap :-/
It's not that hacky :-) We copy sockaddr_in bits before overwriting ss:
struct sockaddr_in v4 = *(struct sockaddr_in *)ss;
It could be easier to read, perhaps by copying just the fields we need:
struct sockaddr_in *v4 = (struct sockaddr_in *)ss;
uint32_t addr = v4->sin_addr.saddr;
in_port_t port = v4->sin_port;
> I was thinking about adding new, on the stack sin6, fully initializing
> it and then doing memcpy into ss.
> But I decided that adding memset is probably good enough :-)
Makes sense. Either way sounds good to me.
next prev parent reply other threads:[~2020-08-10 20:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-07 22:38 [PATCH bpf] selftests/bpf: fix v4_to_v6 in sk_lookup Stanislav Fomichev
2020-08-08 18:46 ` Jakub Sitnicki
2020-08-10 16:14 ` Stanislav Fomichev
2020-08-10 20:30 ` Jakub Sitnicki [this message]
2020-08-11 13:43 ` Daniel Borkmann
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=87sgcus0pc.fsf@cloudflare.com \
--to=jakub@cloudflare.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=sdf@google.com \
/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.