mirror of https://gitee.com/openkylin/linux.git
xsk: Validate socket state in xsk_recvmsg, prior touching socket members
In AF_XDP the socket state needs to be checked, prior touching the
members of the socket. This was not the case for the recvmsg
implementation. Fix that by moving the xsk_is_bound() call.
Fixes: 45a8668184
("xsk: Add support for recvmsg()")
Reported-by: kernel test robot <oliver.sang@intel.com>
Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/bpf/20201207082008.132263-1-bjorn.topel@gmail.com
This commit is contained in:
parent
2f4b03195f
commit
3546b9b8ec
|
@ -554,12 +554,12 @@ static int xsk_recvmsg(struct socket *sock, struct msghdr *m, size_t len, int fl
|
||||||
struct sock *sk = sock->sk;
|
struct sock *sk = sock->sk;
|
||||||
struct xdp_sock *xs = xdp_sk(sk);
|
struct xdp_sock *xs = xdp_sk(sk);
|
||||||
|
|
||||||
|
if (unlikely(!xsk_is_bound(xs)))
|
||||||
|
return -ENXIO;
|
||||||
if (unlikely(!(xs->dev->flags & IFF_UP)))
|
if (unlikely(!(xs->dev->flags & IFF_UP)))
|
||||||
return -ENETDOWN;
|
return -ENETDOWN;
|
||||||
if (unlikely(!xs->rx))
|
if (unlikely(!xs->rx))
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
if (unlikely(!xsk_is_bound(xs)))
|
|
||||||
return -ENXIO;
|
|
||||||
if (unlikely(need_wait))
|
if (unlikely(need_wait))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue