Skip to content

Commit 4a02609

Browse files
committed
Merge branch 'fixes-for-ktls'
John Fastabend says: ==================== Couple fixes for TLS and BPF interactions. ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 4de75d3 + bb9aefd commit 4a02609

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

net/core/filter.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,6 +2602,22 @@ BPF_CALL_2(bpf_msg_cork_bytes, struct sk_msg *, msg, u32, bytes)
26022602
return 0;
26032603
}
26042604

2605+
static void sk_msg_reset_curr(struct sk_msg *msg)
2606+
{
2607+
u32 i = msg->sg.start;
2608+
u32 len = 0;
2609+
2610+
do {
2611+
len += sk_msg_elem(msg, i)->length;
2612+
sk_msg_iter_var_next(i);
2613+
if (len >= msg->sg.size)
2614+
break;
2615+
} while (i != msg->sg.end);
2616+
2617+
msg->sg.curr = i;
2618+
msg->sg.copybreak = 0;
2619+
}
2620+
26052621
static const struct bpf_func_proto bpf_msg_cork_bytes_proto = {
26062622
.func = bpf_msg_cork_bytes,
26072623
.gpl_only = false,
@@ -2721,6 +2737,7 @@ BPF_CALL_4(bpf_msg_pull_data, struct sk_msg *, msg, u32, start,
27212737
msg->sg.end - shift + NR_MSG_FRAG_IDS :
27222738
msg->sg.end - shift;
27232739
out:
2740+
sk_msg_reset_curr(msg);
27242741
msg->data = sg_virt(&msg->sg.data[first_sge]) + start - offset;
27252742
msg->data_end = msg->data + bytes;
27262743
return 0;
@@ -2857,6 +2874,7 @@ BPF_CALL_4(bpf_msg_push_data, struct sk_msg *, msg, u32, start,
28572874
msg->sg.data[new] = rsge;
28582875
}
28592876

2877+
sk_msg_reset_curr(msg);
28602878
sk_msg_compute_data_pointers(msg);
28612879
return 0;
28622880
}
@@ -3025,6 +3043,7 @@ BPF_CALL_4(bpf_msg_pop_data, struct sk_msg *, msg, u32, start,
30253043

30263044
sk_mem_uncharge(msg->sk, len - pop);
30273045
msg->sg.size -= (len - pop);
3046+
sk_msg_reset_curr(msg);
30283047
sk_msg_compute_data_pointers(msg);
30293048
return 0;
30303049
}

net/tls/tls_sw.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,6 +952,8 @@ static int tls_sw_sendmsg_splice(struct sock *sk, struct msghdr *msg,
952952
}
953953

954954
sk_msg_page_add(msg_pl, page, part, off);
955+
msg_pl->sg.copybreak = 0;
956+
msg_pl->sg.curr = msg_pl->sg.end;
955957
sk_mem_charge(sk, part);
956958
*copied += part;
957959
try_to_copy -= part;

0 commit comments

Comments
 (0)