From: Mauricio Vasquez B <mauricio.vasquez@polito.it>
To: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
netdev@vger.kernel.org
Subject: [RFC PATCH bpf-next v4 2/7] bpf/syscall: allow key to be null in map functions
Date: Thu, 04 Oct 2018 19:12:34 +0200 [thread overview]
Message-ID: <153867315418.10087.16314091028767268287.stgit@kernel> (raw)
In-Reply-To: <153867314370.10087.2202062772042248653.stgit@kernel>
This commit adds the required logic to allow key being NULL
in case the key_size of the map is 0.
A new __bpf_copy_key function helper only copies the key from
userpsace when key_size != 0, otherwise it enforces that key must be
null.
Signed-off-by: Mauricio Vasquez B <mauricio.vasquez@polito.it>
---
kernel/bpf/syscall.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 5742df21598c..eb75e8af73ff 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -651,6 +651,17 @@ int __weak bpf_stackmap_copy(struct bpf_map *map, void *key, void *value)
return -ENOTSUPP;
}
+static void *__bpf_copy_key(void __user *ukey, u64 key_size)
+{
+ if (key_size)
+ return memdup_user(ukey, key_size);
+
+ if (ukey)
+ return ERR_PTR(-EINVAL);
+
+ return NULL;
+}
+
/* last field in 'union bpf_attr' used by this command */
#define BPF_MAP_LOOKUP_ELEM_LAST_FIELD value
@@ -678,7 +689,7 @@ static int map_lookup_elem(union bpf_attr *attr)
goto err_put;
}
- key = memdup_user(ukey, map->key_size);
+ key = __bpf_copy_key(ukey, map->key_size);
if (IS_ERR(key)) {
err = PTR_ERR(key);
goto err_put;
@@ -769,7 +780,7 @@ static int map_update_elem(union bpf_attr *attr)
goto err_put;
}
- key = memdup_user(ukey, map->key_size);
+ key = __bpf_copy_key(ukey, map->key_size);
if (IS_ERR(key)) {
err = PTR_ERR(key);
goto err_put;
@@ -871,7 +882,7 @@ static int map_delete_elem(union bpf_attr *attr)
goto err_put;
}
- key = memdup_user(ukey, map->key_size);
+ key = __bpf_copy_key(ukey, map->key_size);
if (IS_ERR(key)) {
err = PTR_ERR(key);
goto err_put;
@@ -923,7 +934,7 @@ static int map_get_next_key(union bpf_attr *attr)
}
if (ukey) {
- key = memdup_user(ukey, map->key_size);
+ key = __bpf_copy_key(ukey, map->key_size);
if (IS_ERR(key)) {
err = PTR_ERR(key);
goto err_put;
next prev parent reply other threads:[~2018-10-05 0:07 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-04 17:12 [RFC PATCH bpf-next v4 0/7] Implement bpf queue/stack maps Mauricio Vasquez B
2018-10-04 17:12 ` [RFC PATCH bpf-next v4 1/7] bpf: rename stack trace map operations Mauricio Vasquez B
2018-10-04 17:12 ` Mauricio Vasquez B [this message]
2018-10-04 17:12 ` [RFC PATCH bpf-next v4 3/7] bpf: add MAP_LOOKUP_AND_DELETE_ELEM syscall Mauricio Vasquez B
2018-10-04 23:37 ` Alexei Starovoitov
2018-10-04 17:12 ` [RFC PATCH bpf-next v4 4/7] bpf: add bpf queue and stack maps Mauricio Vasquez B
2018-10-04 23:57 ` Alexei Starovoitov
[not found] ` <86a2498d-4e2e-7fb9-5139-9738e3796b01@polito.it>
2018-10-05 18:41 ` Alexei Starovoitov
2018-10-08 3:15 ` Mauricio Vasquez
2018-10-04 17:12 ` [RFC PATCH bpf-next v4 5/7] bpf: restrict use of peek/push/pop Mauricio Vasquez B
2018-10-04 23:57 ` Alexei Starovoitov
2018-10-04 17:12 ` [RFC PATCH bpf-next v4 6/7] Sync uapi/bpf.h to tools/include Mauricio Vasquez B
2018-10-04 17:13 ` [RFC PATCH bpf-next v4 7/7] selftests/bpf: add test cases for queue and stack maps Mauricio Vasquez B
2018-10-04 23:59 ` Alexei Starovoitov
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=153867315418.10087.16314091028767268287.stgit@kernel \
--to=mauricio.vasquez@polito.it \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=netdev@vger.kernel.org \
/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.