Skip to content

Commit

Permalink
net/tap: fix overflow of network interface index
Browse files Browse the repository at this point in the history
[ upstream commit 8772bbfa717fdf3251b32ea48bdd21ddd6836dde ]

On Linux and most other systems, network interface index is a 32-bit
integer.  Indexes overflowing the 16-bit integer are frequently seen
when used inside a Docker container.

Fixes: 7c25284 ("net/tap: add netlink back-end for flow API")
Fixes: 2bc0686 ("net/tap: add remote netdevice traffic capture")

Signed-off-by: Alex Kiselev <alex@bisonrouter.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
  • Loading branch information
BisonRouter authored and cpaelzer committed Nov 11, 2022
1 parent 8f270ef commit 698a77f
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 18 deletions.
2 changes: 1 addition & 1 deletion drivers/net/tap/tap_flow.c
Original file line number Diff line number Diff line change
Expand Up @@ -1684,7 +1684,7 @@ int tap_flow_implicit_create(struct pmd_internals *pmd,
struct rte_flow_item *items = implicit_rte_flows[idx].items;
struct rte_flow_attr *attr = &implicit_rte_flows[idx].attr;
struct rte_flow_item_eth eth_local = { .type = 0 };
uint16_t if_index = pmd->remote_if_index;
unsigned int if_index = pmd->remote_if_index;
struct rte_flow *remote_flow = NULL;
struct nlmsg *msg = NULL;
int err = 0;
Expand Down
18 changes: 9 additions & 9 deletions drivers/net/tap/tap_tcmsgs.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ struct qdisc {

struct list_args {
int nlsk_fd;
uint16_t ifindex;
unsigned int ifindex;
void *custom_arg;
};

Expand All @@ -42,7 +42,7 @@ struct qdisc_custom_arg {
* Overrides the default netlink flags for this msg with those specified.
*/
void
tc_init_msg(struct nlmsg *msg, uint16_t ifindex, uint16_t type, uint16_t flags)
tc_init_msg(struct nlmsg *msg, unsigned int ifindex, uint16_t type, uint16_t flags)
{
struct nlmsghdr *n = &msg->nh;

Expand Down Expand Up @@ -70,7 +70,7 @@ tc_init_msg(struct nlmsg *msg, uint16_t ifindex, uint16_t type, uint16_t flags)
* 0 on success, -1 otherwise with errno set.
*/
static int
qdisc_del(int nlsk_fd, uint16_t ifindex, struct qdisc *qinfo)
qdisc_del(int nlsk_fd, unsigned int ifindex, struct qdisc *qinfo)
{
struct nlmsg msg;
int fd = 0;
Expand Down Expand Up @@ -114,7 +114,7 @@ qdisc_del(int nlsk_fd, uint16_t ifindex, struct qdisc *qinfo)
* 0 on success, -1 otherwise with errno set.
*/
int
qdisc_add_multiq(int nlsk_fd, uint16_t ifindex)
qdisc_add_multiq(int nlsk_fd, unsigned int ifindex)
{
struct tc_multiq_qopt opt = {0};
struct nlmsg msg;
Expand Down Expand Up @@ -144,7 +144,7 @@ qdisc_add_multiq(int nlsk_fd, uint16_t ifindex)
* 0 on success, -1 otherwise with errno set.
*/
int
qdisc_add_ingress(int nlsk_fd, uint16_t ifindex)
qdisc_add_ingress(int nlsk_fd, unsigned int ifindex)
{
struct nlmsg msg;

Expand Down Expand Up @@ -208,7 +208,7 @@ qdisc_del_cb(struct nlmsghdr *nh, void *arg)
* 0 on success, -1 otherwise with errno set.
*/
static int
qdisc_iterate(int nlsk_fd, uint16_t ifindex,
qdisc_iterate(int nlsk_fd, unsigned int ifindex,
int (*callback)(struct nlmsghdr *, void *), void *arg)
{
struct nlmsg msg;
Expand Down Expand Up @@ -238,7 +238,7 @@ qdisc_iterate(int nlsk_fd, uint16_t ifindex,
* 0 on success, -1 otherwise with errno set.
*/
int
qdisc_flush(int nlsk_fd, uint16_t ifindex)
qdisc_flush(int nlsk_fd, unsigned int ifindex)
{
return qdisc_iterate(nlsk_fd, ifindex, qdisc_del_cb, NULL);
}
Expand All @@ -256,7 +256,7 @@ qdisc_flush(int nlsk_fd, uint16_t ifindex)
* Return -1 otherwise.
*/
int
qdisc_create_multiq(int nlsk_fd, uint16_t ifindex)
qdisc_create_multiq(int nlsk_fd, unsigned int ifindex)
{
int err = 0;

Expand All @@ -282,7 +282,7 @@ qdisc_create_multiq(int nlsk_fd, uint16_t ifindex)
* Return -1 otherwise.
*/
int
qdisc_create_ingress(int nlsk_fd, uint16_t ifindex)
qdisc_create_ingress(int nlsk_fd, unsigned int ifindex)
{
int err = 0;

Expand Down
16 changes: 8 additions & 8 deletions drivers/net/tap/tap_tcmsgs.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@

#define MULTIQ_MAJOR_HANDLE (1 << 16)

void tc_init_msg(struct nlmsg *msg, uint16_t ifindex, uint16_t type,
void tc_init_msg(struct nlmsg *msg, unsigned int ifindex, uint16_t type,
uint16_t flags);
int qdisc_list(int nlsk_fd, uint16_t ifindex);
int qdisc_flush(int nlsk_fd, uint16_t ifindex);
int qdisc_create_ingress(int nlsk_fd, uint16_t ifindex);
int qdisc_create_multiq(int nlsk_fd, uint16_t ifindex);
int qdisc_add_ingress(int nlsk_fd, uint16_t ifindex);
int qdisc_add_multiq(int nlsk_fd, uint16_t ifindex);
int filter_list_ingress(int nlsk_fd, uint16_t ifindex);
int qdisc_list(int nlsk_fd, unsigned int ifindex);
int qdisc_flush(int nlsk_fd, unsigned int ifindex);
int qdisc_create_ingress(int nlsk_fd, unsigned int ifindex);
int qdisc_create_multiq(int nlsk_fd, unsigned int ifindex);
int qdisc_add_ingress(int nlsk_fd, unsigned int ifindex);
int qdisc_add_multiq(int nlsk_fd, unsigned int ifindex);
int filter_list_ingress(int nlsk_fd, unsigned int ifindex);

#endif /* _TAP_TCMSGS_H_ */

0 comments on commit 698a77f

Please sign in to comment.