aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDaniel Borkmann <[email protected]>2018-12-19 00:27:24 +0100
committerDaniel Borkmann <[email protected]>2018-12-19 00:30:05 +0100
commitdd4bfda9cfd1b0b4aad8760fc027cc81e0c6787f (patch)
tree70590ac2bacf2a40aec88e06aca9e924e48695ef /include
parent0bae2d4d62d523f06ff1a8e88ce38b45400acd28 (diff)
parent945a47d87cee24a95e11fdc0cd868b872f9b9616 (diff)
Merge branch 'bpf-sk-msg-size-member'
John Fastabend says: ==================== This adds a size field to the sk_msg_md data structure used by SK_MSG programs. Without this in the zerocopy case and in the copy case where multiple iovs are in use its difficult to know how much data can be pulled in. The normal method of reading data and data_end only give the current contiguous buffer. BPF programs can attempt to pull in extra data but have to guess if it exists. This can result in multiple "guesses" its much better if we know upfront the size of the sk_msg. ==================== Acked-by: Martin KaFai Lau <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]>
Diffstat (limited to 'include')
-rw-r--r--include/linux/skmsg.h3
-rw-r--r--include/uapi/linux/bpf.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/skmsg.h b/include/linux/skmsg.h
index 2a11e9d91dfa..eb8f6cb84c10 100644
--- a/include/linux/skmsg.h
+++ b/include/linux/skmsg.h
@@ -36,6 +36,9 @@ struct sk_msg_sg {
struct scatterlist data[MAX_MSG_FRAGS + 1];
};
+/* UAPI in filter.c depends on struct sk_msg_sg being first element. If
+ * this is moved filter.c also must be updated.
+ */
struct sk_msg {
struct sk_msg_sg sg;
void *data;
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 1d324c2cbca2..91c43884f295 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -2665,6 +2665,7 @@ struct sk_msg_md {
__u32 local_ip6[4]; /* Stored in network byte order */
__u32 remote_port; /* Stored in network byte order */
__u32 local_port; /* stored in host byte order */
+ __u32 size; /* Total size of sk_msg */
};
struct sk_reuseport_md {