aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Töpel <bjorn.topel@intel.com>2019-03-08 08:57:27 +0100
committerDaniel Borkmann <daniel@iogearbox.net>2019-03-08 21:17:06 +0100
commitc57b557b644da624982c36b74f608cdb7b902868 (patch)
treec3e8f92b4cb43f8db6c95003b39106e64c7db1cd
parentxsk: fix to reject invalid flags in xsk_bind (diff)
downloadlinux-dev-c57b557b644da624982c36b74f608cdb7b902868.tar.xz
linux-dev-c57b557b644da624982c36b74f608cdb7b902868.zip
xsk: fix to reject invalid options in Tx descriptor
Passing a non-existing option in the options member of struct xdp_desc was, incorrectly, silently ignored. This patch addresses that behavior, and drops any Tx descriptor with non-existing options. We have examined existing user space code, and to our best knowledge, no one is relying on the current incorrect behavior. AF_XDP is still in its infancy, so from our perspective, the risk of breakage is very low, and addressing this problem now is important. Fixes: 35fcde7f8deb ("xsk: support for Tx") 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_queue.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/xdp/xsk_queue.h b/net/xdp/xsk_queue.h
index bcb5cbb40419..610c0bdc0c2b 100644
--- a/net/xdp/xsk_queue.h
+++ b/net/xdp/xsk_queue.h
@@ -174,8 +174,8 @@ static inline bool xskq_is_valid_desc(struct xsk_queue *q, struct xdp_desc *d)
if (!xskq_is_valid_addr(q, d->addr))
return false;
- if (((d->addr + d->len) & q->chunk_mask) !=
- (d->addr & q->chunk_mask)) {
+ if (((d->addr + d->len) & q->chunk_mask) != (d->addr & q->chunk_mask) ||
+ d->options) {
q->invalid_descs++;
return false;
}