mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-21 10:01:00 +00:00
bpf: Sockmap/tls, skmsg can have wrapped skmsg that needs extra chaining
commit9aaaa56845
upstream. Its possible through a set of push, pop, apply helper calls to construct a skmsg, which is just a ring of scatterlist elements, with the start value larger than the end value. For example, end start |_0_|_1_| ... |_n_|_n+1_| Where end points at 1 and start points and n so that valid elements is the set {n, n+1, 0, 1}. Currently, because we don't build the correct chain only {n, n+1} will be sent. This adds a check and sg_chain call to correctly submit the above to the crypto and tls send path. Fixes:d3b18ad31f
("tls: add bpf support to sk_msg handling") Signed-off-by: John Fastabend <john.fastabend@gmail.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/bpf/20200111061206.8028-8-john.fastabend@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
147fd4dc2a
commit
d529d6c9f7
1 changed files with 6 additions and 0 deletions
|
@ -724,6 +724,12 @@ static int tls_push_record(struct sock *sk, int flags,
|
|||
sg_mark_end(sk_msg_elem(msg_pl, i));
|
||||
}
|
||||
|
||||
if (msg_pl->sg.end < msg_pl->sg.start) {
|
||||
sg_chain(&msg_pl->sg.data[msg_pl->sg.start],
|
||||
MAX_SKB_FRAGS - msg_pl->sg.start + 1,
|
||||
msg_pl->sg.data);
|
||||
}
|
||||
|
||||
i = msg_pl->sg.start;
|
||||
sg_chain(rec->sg_aead_in, 2, &msg_pl->sg.data[i]);
|
||||
|
||||
|
|
Loading…
Reference in a new issue