[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAPhsuW4kjsDehABaN9JWegfNcu2J3u2K+=0vbxZQCO8172gQMg@mail.gmail.com>
Date: Thu, 9 Jan 2020 10:37:28 -0800
From: Song Liu <song@...nel.org>
To: John Fastabend <john.fastabend@...il.com>
Cc: bpf <bpf@...r.kernel.org>, Networking <netdev@...r.kernel.org>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>
Subject: Re: [bpf PATCH 4/9] bpf: sockmap, skmsg helper overestimates push,
pull, and pop bounds
On Wed, Jan 8, 2020 at 1:15 PM John Fastabend <john.fastabend@...il.com> wrote:
>
> In the push, pull, and pop helpers operating on skmsg objects to make
> data writable or insert/remove data we use this bounds check to ensure
> specified data is valid,
>
> /* Bounds checks: start and pop must be inside message */
> if (start >= offset + l || last >= msg->sg.size)
> return -EINVAL;
>
> The problem here is offset has already included the length of the
> current element the 'l' above. So start could be past the end of
> the scatterlist element in the case where start also points into an
> offset on the last skmsg element.
>
> To fix do the accounting slightly different by adding the length of
> the previous entry to offset at the start of the iteration. And
> ensure its initialized to zero so that the first iteration does
> nothing.
>
> Fixes: 604326b41a6fb ("bpf, sockmap: convert to generic sk_msg interface")
> Fixes: 6fff607e2f14b ("bpf: sk_msg program helper bpf_msg_push_data")
> Fixes: 7246d8ed4dcce ("bpf: helper to pop data from messages")
> Signed-off-by: John Fastabend <john.fastabend@...il.com>
This is pretty tricky... But it looks right.
Acked-by: Song Liu <songliubraving@...com>
Powered by blists - more mailing lists