Skip to content

Commit 1f1cba7

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
Daniel Borkmann says: ==================== pull-request: bpf 2018-04-09 The following pull-request contains BPF updates for your *net* tree. The main changes are: 1) Two sockmap fixes: i) fix a potential warning when a socket with pending cork data is closed by freeing the memory right when the socket is closed instead of seeing still outstanding memory at garbage collector time, ii) fix a NULL pointer deref in case of duplicates release calls, so make sure to only reset the sk_prot pointer when it's in a valid state to do so, both from John. 2) Fix a compilation warning in bpf_prog_attach_check_attach_type() by moving the function under CONFIG_CGROUP_BPF ifdef since only used there, from Anders. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 4c7c12e + 3349158 commit 1f1cba7

File tree

2 files changed

+22
-14
lines changed

2 files changed

+22
-14
lines changed

kernel/bpf/sockmap.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,10 @@ static void bpf_tcp_release(struct sock *sk)
182182
psock->cork = NULL;
183183
}
184184

185-
sk->sk_prot = psock->sk_proto;
186-
psock->sk_proto = NULL;
185+
if (psock->sk_proto) {
186+
sk->sk_prot = psock->sk_proto;
187+
psock->sk_proto = NULL;
188+
}
187189
out:
188190
rcu_read_unlock();
189191
}
@@ -211,6 +213,12 @@ static void bpf_tcp_close(struct sock *sk, long timeout)
211213
close_fun = psock->save_close;
212214

213215
write_lock_bh(&sk->sk_callback_lock);
216+
if (psock->cork) {
217+
free_start_sg(psock->sock, psock->cork);
218+
kfree(psock->cork);
219+
psock->cork = NULL;
220+
}
221+
214222
list_for_each_entry_safe(md, mtmp, &psock->ingress, list) {
215223
list_del(&md->list);
216224
free_start_sg(psock->sock, md);

kernel/bpf/syscall.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,18 +1226,6 @@ bpf_prog_load_check_attach_type(enum bpf_prog_type prog_type,
12261226
}
12271227
}
12281228

1229-
static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog,
1230-
enum bpf_attach_type attach_type)
1231-
{
1232-
switch (prog->type) {
1233-
case BPF_PROG_TYPE_CGROUP_SOCK:
1234-
case BPF_PROG_TYPE_CGROUP_SOCK_ADDR:
1235-
return attach_type == prog->expected_attach_type ? 0 : -EINVAL;
1236-
default:
1237-
return 0;
1238-
}
1239-
}
1240-
12411229
/* last field in 'union bpf_attr' used by this command */
12421230
#define BPF_PROG_LOAD_LAST_FIELD expected_attach_type
12431231

@@ -1465,6 +1453,18 @@ static int bpf_raw_tracepoint_open(const union bpf_attr *attr)
14651453

14661454
#ifdef CONFIG_CGROUP_BPF
14671455

1456+
static int bpf_prog_attach_check_attach_type(const struct bpf_prog *prog,
1457+
enum bpf_attach_type attach_type)
1458+
{
1459+
switch (prog->type) {
1460+
case BPF_PROG_TYPE_CGROUP_SOCK:
1461+
case BPF_PROG_TYPE_CGROUP_SOCK_ADDR:
1462+
return attach_type == prog->expected_attach_type ? 0 : -EINVAL;
1463+
default:
1464+
return 0;
1465+
}
1466+
}
1467+
14681468
#define BPF_PROG_ATTACH_LAST_FIELD attach_flags
14691469

14701470
static int sockmap_get_from_fd(const union bpf_attr *attr,

0 commit comments

Comments
 (0)