Unverified Commit 1f76158f authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!13089 bpf, net: Fix a potential race in do_sock_getsockopt()

parents b96ea10d b0072308
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -434,14 +434,6 @@ int bpf_percpu_cgroup_storage_update(struct bpf_map *map, void *key,
	__ret;								       \
})

#define BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen)			       \
({									       \
	int __ret = 0;							       \
	if (cgroup_bpf_enabled(CGROUP_GETSOCKOPT))			       \
		get_user(__ret, optlen);				       \
	__ret;								       \
})

#define BPF_CGROUP_RUN_PROG_GETSOCKOPT(sock, level, optname, optval, optlen,   \
				       max_optlen, retval)		       \
({									       \
@@ -530,7 +522,6 @@ static inline int bpf_percpu_cgroup_storage_update(struct bpf_map *map,
#define BPF_CGROUP_RUN_PROG_SOCK_OPS(sock_ops) ({ 0; })
#define BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(atype, major, minor, access) ({ 0; })
#define BPF_CGROUP_RUN_PROG_SYSCTL(head,table,write,buf,count,pos) ({ 0; })
#define BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen) ({ 0; })
#define BPF_CGROUP_RUN_PROG_GETSOCKOPT(sock, level, optname, optval, \
				       optlen, max_optlen, retval) ({ retval; })
#define BPF_CGROUP_RUN_PROG_SETSOCKOPT(sock, level, optname, optval, optlen, \
+2 −2
Original line number Diff line number Diff line
@@ -2178,7 +2178,7 @@ int __sys_getsockopt(int fd, int level, int optname, char __user *optval,
{
	int err, fput_needed;
	struct socket *sock;
	int max_optlen;
	int max_optlen = 0;

	sock = sockfd_lookup_light(fd, &err, &fput_needed);
	if (!sock)
@@ -2189,7 +2189,7 @@ int __sys_getsockopt(int fd, int level, int optname, char __user *optval,
		goto out_put;

	if (!in_compat_syscall())
		max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen);
		get_user(max_optlen, optlen);

	if (level == SOL_SOCKET)
		err = sock_getsockopt(sock, level, optname, optval, optlen);