summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Töpel <bjorn.topel@intel.com>2019-09-04 07:49:13 -0400
committerDaniel Borkmann <daniel@iogearbox.net>2019-09-05 08:11:52 -0400
commit25dc18ff9b583a76fff00c7d9d14a40524653c45 (patch)
tree44b3cf7745546d08d882b8e09403bbe14d6fcf04
parent42fddcc7c64b723a867c7b2f5f7505e244212f13 (diff)
xsk: lock the control mutex in sock_diag interface
When accessing the members of an XDP socket, the control mutex should be held. This commit fixes that. Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com> Fixes: a36b38aa2af6 ("xsk: add sock_diag interface for AF_XDP") Signed-off-by: Björn Töpel <bjorn.topel@intel.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r--net/xdp/xsk_diag.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/xdp/xsk_diag.c b/net/xdp/xsk_diag.c
index 9986a759fe06..f59791ba43a0 100644
--- a/net/xdp/xsk_diag.c
+++ b/net/xdp/xsk_diag.c
@@ -97,6 +97,7 @@ static int xsk_diag_fill(struct sock *sk, struct sk_buff *nlskb,
97 msg->xdiag_ino = sk_ino; 97 msg->xdiag_ino = sk_ino;
98 sock_diag_save_cookie(sk, msg->xdiag_cookie); 98 sock_diag_save_cookie(sk, msg->xdiag_cookie);
99 99
100 mutex_lock(&xs->mutex);
100 if ((req->xdiag_show & XDP_SHOW_INFO) && xsk_diag_put_info(xs, nlskb)) 101 if ((req->xdiag_show & XDP_SHOW_INFO) && xsk_diag_put_info(xs, nlskb))
101 goto out_nlmsg_trim; 102 goto out_nlmsg_trim;
102 103
@@ -117,10 +118,12 @@ static int xsk_diag_fill(struct sock *sk, struct sk_buff *nlskb,
117 sock_diag_put_meminfo(sk, nlskb, XDP_DIAG_MEMINFO)) 118 sock_diag_put_meminfo(sk, nlskb, XDP_DIAG_MEMINFO))
118 goto out_nlmsg_trim; 119 goto out_nlmsg_trim;
119 120
121 mutex_unlock(&xs->mutex);
120 nlmsg_end(nlskb, nlh); 122 nlmsg_end(nlskb, nlh);
121 return 0; 123 return 0;
122 124
123out_nlmsg_trim: 125out_nlmsg_trim:
126 mutex_unlock(&xs->mutex);
124 nlmsg_cancel(nlskb, nlh); 127 nlmsg_cancel(nlskb, nlh);
125 return -EMSGSIZE; 128 return -EMSGSIZE;
126} 129}