diff options
author | Björn Töpel <bjorn.topel@intel.com> | 2019-03-08 08:57:27 +0100 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-03-08 21:17:06 +0100 |
commit | c57b557b644da624982c36b74f608cdb7b902868 (patch) | |
tree | c3e8f92b4cb43f8db6c95003b39106e64c7db1cd /net/xdp | |
parent | f54ba391d88f5a5d032175b4c308c176e34b80b7 (diff) | |
download | linux-stable-c57b557b644da624982c36b74f608cdb7b902868.tar.gz linux-stable-c57b557b644da624982c36b74f608cdb7b902868.tar.bz2 linux-stable-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>
Diffstat (limited to 'net/xdp')
-rw-r--r-- | net/xdp/xsk_queue.h | 4 |
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; } |