backport patchs to fix problems
Signed-off-by: liweigang <liweiganga@uniontech.com>
This commit is contained in:
parent
3ffab4d292
commit
a0797a59dd
40
backport-bridge-fix-potential-snprintf-overflow.patch
Normal file
40
backport-bridge-fix-potential-snprintf-overflow.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From 4d80122ae82aea86cb740b5202f6c3fde6183538 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
Date: Mon, 18 Sep 2023 11:34:42 -0700
|
||||||
|
Subject: [PATCH] bridge: fix potential snprintf overflow
|
||||||
|
|
||||||
|
There is a theoretical snprintf overflow in bridge slave bitmask
|
||||||
|
print code found by CodeQL scan.
|
||||||
|
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
ip/iplink_bridge_slave.c | 11 +++++++++--
|
||||||
|
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ip/iplink_bridge_slave.c b/ip/iplink_bridge_slave.c
|
||||||
|
index dc73c8657..3821923b5 100644
|
||||||
|
--- a/ip/iplink_bridge_slave.c
|
||||||
|
+++ b/ip/iplink_bridge_slave.c
|
||||||
|
@@ -100,13 +100,20 @@ static void _bitmask2str(__u16 bitmask, char *dst, size_t dst_size,
|
||||||
|
int len, i;
|
||||||
|
|
||||||
|
for (i = 0, len = 0; bitmask; i++, bitmask >>= 1) {
|
||||||
|
+ int n;
|
||||||
|
+
|
||||||
|
if (bitmask & 0x1) {
|
||||||
|
if (tbl[i])
|
||||||
|
- len += snprintf(dst + len, dst_size - len, "%s,",
|
||||||
|
+ n = snprintf(dst + len, dst_size - len, "%s,",
|
||||||
|
tbl[i]);
|
||||||
|
else
|
||||||
|
- len += snprintf(dst + len, dst_size - len, "0x%x,",
|
||||||
|
+ n = snprintf(dst + len, dst_size - len, "0x%x,",
|
||||||
|
(1 << i));
|
||||||
|
+
|
||||||
|
+ if (n < 0 || n >= dst_size - len)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ len += n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
27
backport-ila-fix-potential-snprintf-buffer-overflow.patch
Normal file
27
backport-ila-fix-potential-snprintf-buffer-overflow.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From e8a3fca81cd4b8fee14cfb14a5ce9c1b3b63e797 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
Date: Mon, 18 Sep 2023 11:36:32 -0700
|
||||||
|
Subject: [PATCH] ila: fix potential snprintf buffer overflow
|
||||||
|
|
||||||
|
The code to print 64 bit address has a theoretical overflow
|
||||||
|
of snprintf buffer found by CodeQL scan.
|
||||||
|
Address by checking result.
|
||||||
|
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
ip/ipila.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ip/ipila.c b/ip/ipila.c
|
||||||
|
index 4f6d578f2..23b19a108 100644
|
||||||
|
--- a/ip/ipila.c
|
||||||
|
+++ b/ip/ipila.c
|
||||||
|
@@ -60,6 +60,8 @@ static void print_addr64(__u64 addr, char *buff, size_t len)
|
||||||
|
sep = "";
|
||||||
|
|
||||||
|
ret = snprintf(&buff[written], len - written, "%x%s", v, sep);
|
||||||
|
+ if (ret < 0 || ret >= len - written)
|
||||||
|
+ break;
|
||||||
|
written += ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
44
backport-ip-fix-memory-leak-in-ip-maddr-show.patch
Normal file
44
backport-ip-fix-memory-leak-in-ip-maddr-show.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From 575322b09c3c6bc1806f2faa31edcfb64df302bb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Maxim Petrov <mmrmaximuzz@gmail.com>
|
||||||
|
Date: Sun, 15 Oct 2023 16:32:12 +0200
|
||||||
|
Subject: [PATCH] ip: fix memory leak in 'ip maddr show'
|
||||||
|
|
||||||
|
In `read_dev_mcast`, the list of ma_info is allocated, but not cleared
|
||||||
|
after use. Free the list in the end to make valgrind happy.
|
||||||
|
|
||||||
|
Detected by valgrind: "valgrind ./ip/ip maddr show"
|
||||||
|
|
||||||
|
Signed-off-by: Maxim Petrov <mmrmaximuzz@gmail.com>
|
||||||
|
---
|
||||||
|
ip/ipmaddr.c | 11 +++++++++++
|
||||||
|
1 file changed, 11 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/ip/ipmaddr.c b/ip/ipmaddr.c
|
||||||
|
index 176f6ab74..2418b3031 100644
|
||||||
|
--- a/ip/ipmaddr.c
|
||||||
|
+++ b/ip/ipmaddr.c
|
||||||
|
@@ -79,6 +79,16 @@ static void maddr_ins(struct ma_info **lst, struct ma_info *m)
|
||||||
|
*lst = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void maddr_clear(struct ma_info *lst)
|
||||||
|
+{
|
||||||
|
+ struct ma_info *mp;
|
||||||
|
+
|
||||||
|
+ while ((mp = lst) != NULL) {
|
||||||
|
+ lst = mp->next;
|
||||||
|
+ free(mp);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void read_dev_mcast(struct ma_info **result_p)
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
@@ -286,6 +296,7 @@ static int multiaddr_list(int argc, char **argv)
|
||||||
|
if (!filter.family || filter.family == AF_INET6)
|
||||||
|
read_igmp6(&list);
|
||||||
|
print_mlist(stdout, list);
|
||||||
|
+ maddr_clear(list);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
148
backport-iproute2-prevent-memory-leak.patch
Normal file
148
backport-iproute2-prevent-memory-leak.patch
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
From 2c3ebb2ae08a634615e56303d784ddb366e47f04 Mon Sep 17 00:00:00 2001
|
||||||
|
From: heminhong <heminhong@kylinos.cn>
|
||||||
|
Date: Thu, 16 Nov 2023 11:13:08 +0800
|
||||||
|
Subject: [PATCH] iproute2: prevent memory leak
|
||||||
|
|
||||||
|
When the return value of rtnl_talk() is not less than 0,
|
||||||
|
'answer' will be allocated. The 'answer' should be free
|
||||||
|
after using, otherwise it will cause memory leak.
|
||||||
|
|
||||||
|
Fixes: a066cc6623e1 ("gre/gre6: Unify local/remote endpoint address parsing")
|
||||||
|
Signed-off-by: heminhong <heminhong@kylinos.cn>
|
||||||
|
Reviewed-by: Andrea Claudi <aclaudi@redhat.com>
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
ip/link_gre.c | 3 ++-
|
||||||
|
ip/link_gre6.c | 3 ++-
|
||||||
|
ip/link_ip6tnl.c | 3 ++-
|
||||||
|
ip/link_iptnl.c | 3 ++-
|
||||||
|
ip/link_vti.c | 3 ++-
|
||||||
|
ip/link_vti6.c | 3 ++-
|
||||||
|
6 files changed, 12 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ip/link_gre.c b/ip/link_gre.c
|
||||||
|
index 74a5b5e96..6d71864c1 100644
|
||||||
|
--- a/ip/link_gre.c
|
||||||
|
+++ b/ip/link_gre.c
|
||||||
|
@@ -76,7 +76,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
.i.ifi_family = preferred_family,
|
||||||
|
.i.ifi_index = ifi->ifi_index,
|
||||||
|
};
|
||||||
|
- struct nlmsghdr *answer;
|
||||||
|
+ struct nlmsghdr *answer = NULL;
|
||||||
|
struct rtattr *tb[IFLA_MAX + 1];
|
||||||
|
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
|
struct rtattr *greinfo[IFLA_GRE_MAX + 1];
|
||||||
|
@@ -113,6 +113,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
get_failed:
|
||||||
|
fprintf(stderr,
|
||||||
|
"Failed to get existing tunnel info.\n");
|
||||||
|
+ free(answer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/ip/link_gre6.c b/ip/link_gre6.c
|
||||||
|
index b03bd65ad..4d1c65748 100644
|
||||||
|
--- a/ip/link_gre6.c
|
||||||
|
+++ b/ip/link_gre6.c
|
||||||
|
@@ -79,7 +79,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
.i.ifi_family = preferred_family,
|
||||||
|
.i.ifi_index = ifi->ifi_index,
|
||||||
|
};
|
||||||
|
- struct nlmsghdr *answer;
|
||||||
|
+ struct nlmsghdr *answer = NULL;
|
||||||
|
struct rtattr *tb[IFLA_MAX + 1];
|
||||||
|
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
|
struct rtattr *greinfo[IFLA_GRE_MAX + 1];
|
||||||
|
@@ -115,6 +115,7 @@ static int gre_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
get_failed:
|
||||||
|
fprintf(stderr,
|
||||||
|
"Failed to get existing tunnel info.\n");
|
||||||
|
+ free(answer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c
|
||||||
|
index b27d696f5..3a30dca93 100644
|
||||||
|
--- a/ip/link_ip6tnl.c
|
||||||
|
+++ b/ip/link_ip6tnl.c
|
||||||
|
@@ -72,7 +72,7 @@ static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
.i.ifi_family = preferred_family,
|
||||||
|
.i.ifi_index = ifi->ifi_index,
|
||||||
|
};
|
||||||
|
- struct nlmsghdr *answer;
|
||||||
|
+ struct nlmsghdr *answer = NULL;
|
||||||
|
struct rtattr *tb[IFLA_MAX + 1];
|
||||||
|
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
|
struct rtattr *iptuninfo[IFLA_IPTUN_MAX + 1];
|
||||||
|
@@ -101,6 +101,7 @@ static int ip6tunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
get_failed:
|
||||||
|
fprintf(stderr,
|
||||||
|
"Failed to get existing tunnel info.\n");
|
||||||
|
+ free(answer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c
|
||||||
|
index 1315aebe9..879202f71 100644
|
||||||
|
--- a/ip/link_iptnl.c
|
||||||
|
+++ b/ip/link_iptnl.c
|
||||||
|
@@ -73,7 +73,7 @@ static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
.i.ifi_family = preferred_family,
|
||||||
|
.i.ifi_index = ifi->ifi_index,
|
||||||
|
};
|
||||||
|
- struct nlmsghdr *answer;
|
||||||
|
+ struct nlmsghdr *answer = NULL;
|
||||||
|
struct rtattr *tb[IFLA_MAX + 1];
|
||||||
|
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
|
struct rtattr *iptuninfo[IFLA_IPTUN_MAX + 1];
|
||||||
|
@@ -105,6 +105,7 @@ static int iptunnel_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
get_failed:
|
||||||
|
fprintf(stderr,
|
||||||
|
"Failed to get existing tunnel info.\n");
|
||||||
|
+ free(answer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/ip/link_vti.c b/ip/link_vti.c
|
||||||
|
index 509432543..7a95dc02d 100644
|
||||||
|
--- a/ip/link_vti.c
|
||||||
|
+++ b/ip/link_vti.c
|
||||||
|
@@ -48,7 +48,7 @@ static int vti_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
.i.ifi_family = preferred_family,
|
||||||
|
.i.ifi_index = ifi->ifi_index,
|
||||||
|
};
|
||||||
|
- struct nlmsghdr *answer;
|
||||||
|
+ struct nlmsghdr *answer = NULL;
|
||||||
|
struct rtattr *tb[IFLA_MAX + 1];
|
||||||
|
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
|
struct rtattr *vtiinfo[IFLA_VTI_MAX + 1];
|
||||||
|
@@ -69,6 +69,7 @@ static int vti_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
get_failed:
|
||||||
|
fprintf(stderr,
|
||||||
|
"Failed to get existing tunnel info.\n");
|
||||||
|
+ free(answer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/ip/link_vti6.c b/ip/link_vti6.c
|
||||||
|
index 5764221eb..aaf701d33 100644
|
||||||
|
--- a/ip/link_vti6.c
|
||||||
|
+++ b/ip/link_vti6.c
|
||||||
|
@@ -50,7 +50,7 @@ static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
.i.ifi_family = preferred_family,
|
||||||
|
.i.ifi_index = ifi->ifi_index,
|
||||||
|
};
|
||||||
|
- struct nlmsghdr *answer;
|
||||||
|
+ struct nlmsghdr *answer = NULL;
|
||||||
|
struct rtattr *tb[IFLA_MAX + 1];
|
||||||
|
struct rtattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
|
struct rtattr *vtiinfo[IFLA_VTI_MAX + 1];
|
||||||
|
@@ -71,6 +71,7 @@ static int vti6_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
get_failed:
|
||||||
|
fprintf(stderr,
|
||||||
|
"Failed to get existing tunnel info.\n");
|
||||||
|
+ free(answer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
39
backport-libnetlink-validate-nlmsg-header-length-first.patch
Normal file
39
backport-libnetlink-validate-nlmsg-header-length-first.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
From 78eebdbc7d2f96b01a18d7db33c1c99266efc4bc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Max Kunzelmann <maxdev@posteo.de>
|
||||||
|
Date: Tue, 7 Nov 2023 01:20:55 +0000
|
||||||
|
Subject: [PATCH] libnetlink: validate nlmsg header length first
|
||||||
|
|
||||||
|
Validate the nlmsg header length before accessing the nlmsg payload
|
||||||
|
length.
|
||||||
|
|
||||||
|
Fixes: 892a25e286fb ("libnetlink: break up dump function")
|
||||||
|
|
||||||
|
Signed-off-by: Max Kunzelmann <maxdev@posteo.de>
|
||||||
|
Reviewed-by: Benny Baumann <BenBE@geshi.org>
|
||||||
|
Reviewed-by: Robert Geislinger <github@crpykng.de>
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
lib/libnetlink.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
|
||||||
|
index 7edcd2856..016482294 100644
|
||||||
|
--- a/lib/libnetlink.c
|
||||||
|
+++ b/lib/libnetlink.c
|
||||||
|
@@ -727,13 +727,15 @@ int rtnl_dump_request_n(struct rtnl_handle *rth, struct nlmsghdr *n)
|
||||||
|
static int rtnl_dump_done(struct nlmsghdr *h,
|
||||||
|
const struct rtnl_dump_filter_arg *a)
|
||||||
|
{
|
||||||
|
- int len = *(int *)NLMSG_DATA(h);
|
||||||
|
+ int len;
|
||||||
|
|
||||||
|
if (h->nlmsg_len < NLMSG_LENGTH(sizeof(int))) {
|
||||||
|
fprintf(stderr, "DONE truncated\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ len = *(int *)NLMSG_DATA(h);
|
||||||
|
+
|
||||||
|
if (len < 0) {
|
||||||
|
errno = -len;
|
||||||
|
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
From a193733b7a7ef1e65e1b88045c32f96ed16caeb9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Maks Mishin <maks.mishinfz@gmail.com>
|
||||||
|
Date: Sat, 6 Jan 2024 22:04:23 +0300
|
||||||
|
Subject: [PATCH] lnstat: Fix deref of null in print_json() function
|
||||||
|
|
||||||
|
Now pointer `jw` is being checked for NULL before using
|
||||||
|
in function `jsonw_start_object`.
|
||||||
|
Added exit from function when `jw==NULL`.
|
||||||
|
|
||||||
|
Found by RASU JSC
|
||||||
|
|
||||||
|
Signed-off-by: Maks Mishin <maks.mishinFZ@gmail.com>
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
misc/lnstat.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/misc/lnstat.c b/misc/lnstat.c
|
||||||
|
index c3f2999cc..f802a0f35 100644
|
||||||
|
--- a/misc/lnstat.c
|
||||||
|
+++ b/misc/lnstat.c
|
||||||
|
@@ -112,6 +112,10 @@ static void print_json(FILE *of, const struct lnstat_file *lnstat_files,
|
||||||
|
json_writer_t *jw = jsonw_new(of);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
+ if (jw == NULL) {
|
||||||
|
+ fprintf(stderr, "Failed to create JSON writer\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
jsonw_start_object(jw);
|
||||||
|
for (i = 0; i < fp->num; i++) {
|
||||||
|
const struct lnstat_field *lf = fp->params[i].lf;
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
From 1a68525f4613b4e02e83d4b8004f22ac7ecbfedf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jiri Pirko <jiri@nvidia.com>
|
||||||
|
Date: Thu, 7 Dec 2023 13:53:51 +0100
|
||||||
|
Subject: [PATCH] mnl_utils: sanitize incoming netlink payload size in
|
||||||
|
callbacks
|
||||||
|
|
||||||
|
Don't trust the kernel to send payload of certain size. Sanitize that by
|
||||||
|
checking the payload length in mnlu_cb_stop() and mnlu_cb_error() and
|
||||||
|
only access the payload if it is of required size.
|
||||||
|
|
||||||
|
Note that for mnlu_cb_stop(), this is happening already for example
|
||||||
|
with devlink resource. Kernel sends NLMSG_DONE with zero size payload.
|
||||||
|
|
||||||
|
Fixes: 049c58539f5d ("devlink: mnlg: Add support for extended ack")
|
||||||
|
Fixes: c934da8aaacb ("devlink: mnlg: Catch returned error value of dumpit commands")
|
||||||
|
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
lib/mnl_utils.c | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/lib/mnl_utils.c b/lib/mnl_utils.c
|
||||||
|
index 1c7822282..af5aa4f9e 100644
|
||||||
|
--- a/lib/mnl_utils.c
|
||||||
|
+++ b/lib/mnl_utils.c
|
||||||
|
@@ -61,6 +61,8 @@ static int mnlu_cb_error(const struct nlmsghdr *nlh, void *data)
|
||||||
|
{
|
||||||
|
const struct nlmsgerr *err = mnl_nlmsg_get_payload(nlh);
|
||||||
|
|
||||||
|
+ if (mnl_nlmsg_get_payload_len(nlh) < sizeof(*err))
|
||||||
|
+ return MNL_CB_STOP;
|
||||||
|
/* Netlink subsystems returns the errno value with different signess */
|
||||||
|
if (err->error < 0)
|
||||||
|
errno = -err->error;
|
||||||
|
@@ -75,8 +77,11 @@ static int mnlu_cb_error(const struct nlmsghdr *nlh, void *data)
|
||||||
|
|
||||||
|
static int mnlu_cb_stop(const struct nlmsghdr *nlh, void *data)
|
||||||
|
{
|
||||||
|
- int len = *(int *)NLMSG_DATA(nlh);
|
||||||
|
+ int len;
|
||||||
|
|
||||||
|
+ if (mnl_nlmsg_get_payload_len(nlh) < sizeof(len))
|
||||||
|
+ return MNL_CB_STOP;
|
||||||
|
+ len = *(int *)mnl_nlmsg_get_payload(nlh);
|
||||||
|
if (len < 0) {
|
||||||
|
errno = -len;
|
||||||
|
nl_dump_ext_ack_done(nlh, len);
|
||||||
336
backport-tc-remove-tcindex-classifier.patch
Normal file
336
backport-tc-remove-tcindex-classifier.patch
Normal file
@ -0,0 +1,336 @@
|
|||||||
|
From bc0c1661eb229b77a65f8c5f305fd6fa56e9667f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
Date: Mon, 30 Oct 2023 11:26:33 -0700
|
||||||
|
Subject: [PATCH] tc: remove tcindex classifier
|
||||||
|
|
||||||
|
Support for tcindex classifier was removed by upstream commit
|
||||||
|
8c710f75256b (net/sched: Retire tcindex classifier, 2023-02-14)
|
||||||
|
|
||||||
|
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||||
|
---
|
||||||
|
bash-completion/tc | 7 +-
|
||||||
|
man/man8/tc-tcindex.8 | 58 -------------
|
||||||
|
man/man8/tc.8 | 7 +-
|
||||||
|
tc/Makefile | 1 -
|
||||||
|
tc/f_tcindex.c | 185 ------------------------------------------
|
||||||
|
5 files changed, 2 insertions(+), 256 deletions(-)
|
||||||
|
delete mode 100644 man/man8/tc-tcindex.8
|
||||||
|
delete mode 100644 tc/f_tcindex.c
|
||||||
|
|
||||||
|
diff --git a/bash-completion/tc b/bash-completion/tc
|
||||||
|
index 6af3b7998..db5558ab6 100644
|
||||||
|
--- a/bash-completion/tc
|
||||||
|
+++ b/bash-completion/tc
|
||||||
|
@@ -5,7 +5,7 @@
|
||||||
|
QDISC_KIND=' choke codel bfifo pfifo pfifo_head_drop fq fq_codel gred hhf \
|
||||||
|
mqprio multiq netem pfifo_fast pie fq_pie red rr sfb sfq tbf atm \
|
||||||
|
cbq drr dsmark hfsc htb prio qfq '
|
||||||
|
-FILTER_KIND=' basic bpf cgroup flow flower fw route rsvp tcindex u32 matchall '
|
||||||
|
+FILTER_KIND=' basic bpf cgroup flow flower fw route rsvp u32 matchall '
|
||||||
|
ACTION_KIND=' gact mirred bpf sample '
|
||||||
|
|
||||||
|
# Takes a list of words in argument; each one of them is added to COMPREPLY if
|
||||||
|
@@ -487,11 +487,6 @@ _tc_filter_options()
|
||||||
|
COMPREPLY+=( $( compgen -W 'at' -- "$cur" ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
- tcindex)
|
||||||
|
- _tc_once_attr 'hash mask shift classid action'
|
||||||
|
- _tc_one_of_list 'pass_on fall_through'
|
||||||
|
- return 0
|
||||||
|
- ;;
|
||||||
|
u32)
|
||||||
|
_tc_once_attr 'match link classid action offset ht hashkey sample'
|
||||||
|
COMPREPLY+=( $( compgen -W 'ip ip6 udp tcp icmp u8 u16 u32 mark \
|
||||||
|
diff --git a/man/man8/tc-tcindex.8 b/man/man8/tc-tcindex.8
|
||||||
|
deleted file mode 100644
|
||||||
|
index ccf2c5e81..000000000
|
||||||
|
--- a/man/man8/tc-tcindex.8
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,58 +0,0 @@
|
||||||
|
-.TH "Traffic control index filter" 8 "21 Oct 2015" "iproute2" "Linux"
|
||||||
|
-
|
||||||
|
-.SH NAME
|
||||||
|
-tcindex \- traffic control index filter
|
||||||
|
-.SH SYNOPSIS
|
||||||
|
-.in +8
|
||||||
|
-.ti -8
|
||||||
|
-.BR tc " " filter " ... " tcindex " [ " hash
|
||||||
|
-.IR SIZE " ] [ "
|
||||||
|
-.B mask
|
||||||
|
-.IR MASK " ] [ "
|
||||||
|
-.B shift
|
||||||
|
-.IR SHIFT " ] [ "
|
||||||
|
-.BR pass_on " | " fall_through " ] [ " classid
|
||||||
|
-.IR CLASSID " ] [ "
|
||||||
|
-.B action
|
||||||
|
-.BR ACTION_SPEC " ]"
|
||||||
|
-.SH DESCRIPTION
|
||||||
|
-This filter allows to match packets based on their
|
||||||
|
-.B tcindex
|
||||||
|
-field value, i.e. the combination of the DSCP and ECN fields as present in IPv4
|
||||||
|
-and IPv6 headers.
|
||||||
|
-.SH OPTIONS
|
||||||
|
-.TP
|
||||||
|
-.BI action " ACTION_SPEC"
|
||||||
|
-Apply an action from the generic actions framework on matching packets.
|
||||||
|
-.TP
|
||||||
|
-.BI classid " CLASSID"
|
||||||
|
-Push matching packets into the class identified by
|
||||||
|
-.IR CLASSID .
|
||||||
|
-.TP
|
||||||
|
-.BI hash " SIZE"
|
||||||
|
-Hash table size in entries to use. Defaults to 64.
|
||||||
|
-.TP
|
||||||
|
-.BI mask " MASK"
|
||||||
|
-An optional bitmask to binary
|
||||||
|
-.BR AND " to the packet's " tcindex
|
||||||
|
-field before use.
|
||||||
|
-.TP
|
||||||
|
-.BI shift " SHIFT"
|
||||||
|
-The number of bits to right-shift a packet's
|
||||||
|
-.B tcindex
|
||||||
|
-value before use. If a
|
||||||
|
-.B mask
|
||||||
|
-has been set, masking is done before shifting.
|
||||||
|
-.TP
|
||||||
|
-.B pass_on
|
||||||
|
-If this flag is set, failure to find a class for the resulting ID will make the
|
||||||
|
-filter fail and lead to the next filter being consulted.
|
||||||
|
-.TP
|
||||||
|
-.B fall_through
|
||||||
|
-This is the opposite of
|
||||||
|
-.B pass_on
|
||||||
|
-and the default. The filter will classify the packet even if there is no class
|
||||||
|
-present for the resulting class ID.
|
||||||
|
-
|
||||||
|
-.SH SEE ALSO
|
||||||
|
-.BR tc (8)
|
||||||
|
diff --git a/man/man8/tc.8 b/man/man8/tc.8
|
||||||
|
index 59cc7b17d..ae6de397f 100644
|
||||||
|
--- a/man/man8/tc.8
|
||||||
|
+++ b/man/man8/tc.8
|
||||||
|
@@ -244,10 +244,6 @@ for details.
|
||||||
|
rsvp
|
||||||
|
Match Resource Reservation Protocol (RSVP) packets.
|
||||||
|
.TP
|
||||||
|
-tcindex
|
||||||
|
-Filter packets based on traffic control index. See
|
||||||
|
-.BR tc-tcindex (8).
|
||||||
|
-.TP
|
||||||
|
u32
|
||||||
|
Generic filtering on arbitrary packet data, assisted by syntax to abstract common operations. See
|
||||||
|
.BR tc-u32 (8)
|
||||||
|
@@ -906,8 +902,7 @@ was written by Alexey N. Kuznetsov and added in Linux 2.2.
|
||||||
|
.BR tc-sfq (8),
|
||||||
|
.BR tc-stab (8),
|
||||||
|
.BR tc-tbf (8),
|
||||||
|
-.BR tc-tcindex (8),
|
||||||
|
-.BR tc-u32 (8),
|
||||||
|
+.BR tc-u32 (8)
|
||||||
|
.br
|
||||||
|
.RB "User documentation at " http://lartc.org/ ", but please direct bugreports and patches to: " <netdev@vger.kernel.org>
|
||||||
|
|
||||||
|
diff --git a/tc/Makefile b/tc/Makefile
|
||||||
|
index 82e611257..ab6ad2f5d 100644
|
||||||
|
--- a/tc/Makefile
|
||||||
|
+++ b/tc/Makefile
|
||||||
|
@@ -31,7 +31,6 @@ TCMODULES += f_cgroup.o
|
||||||
|
TCMODULES += f_flower.o
|
||||||
|
TCMODULES += q_dsmark.o
|
||||||
|
TCMODULES += q_gred.o
|
||||||
|
-TCMODULES += f_tcindex.o
|
||||||
|
TCMODULES += q_ingress.o
|
||||||
|
TCMODULES += q_hfsc.o
|
||||||
|
TCMODULES += q_htb.o
|
||||||
|
diff --git a/tc/f_tcindex.c b/tc/f_tcindex.c
|
||||||
|
deleted file mode 100644
|
||||||
|
index ae4cbf118..000000000
|
||||||
|
--- a/tc/f_tcindex.c
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,185 +0,0 @@
|
||||||
|
-/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
-/*
|
||||||
|
- * f_tcindex.c Traffic control index filter
|
||||||
|
- *
|
||||||
|
- * Written 1998,1999 by Werner Almesberger
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-#include <stdio.h>
|
||||||
|
-#include <stdlib.h>
|
||||||
|
-#include <unistd.h>
|
||||||
|
-#include <fcntl.h>
|
||||||
|
-#include <string.h>
|
||||||
|
-#include <netinet/in.h>
|
||||||
|
-
|
||||||
|
-#include "utils.h"
|
||||||
|
-#include "tc_util.h"
|
||||||
|
-
|
||||||
|
-static void explain(void)
|
||||||
|
-{
|
||||||
|
- fprintf(stderr,
|
||||||
|
- " Usage: ... tcindex [ hash SIZE ] [ mask MASK ] [ shift SHIFT ]\n"
|
||||||
|
- " [ pass_on | fall_through ]\n"
|
||||||
|
- " [ classid CLASSID ] [ action ACTION_SPEC ]\n");
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static int tcindex_parse_opt(struct filter_util *qu, char *handle, int argc,
|
||||||
|
- char **argv, struct nlmsghdr *n)
|
||||||
|
-{
|
||||||
|
- struct tcmsg *t = NLMSG_DATA(n);
|
||||||
|
- struct rtattr *tail;
|
||||||
|
- char *end;
|
||||||
|
-
|
||||||
|
- if (handle) {
|
||||||
|
- t->tcm_handle = strtoul(handle, &end, 0);
|
||||||
|
- if (*end) {
|
||||||
|
- fprintf(stderr, "Illegal filter ID\n");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- if (!argc) return 0;
|
||||||
|
- tail = addattr_nest(n, 4096, TCA_OPTIONS);
|
||||||
|
- while (argc) {
|
||||||
|
- if (!strcmp(*argv, "hash")) {
|
||||||
|
- int hash;
|
||||||
|
-
|
||||||
|
- NEXT_ARG();
|
||||||
|
- hash = strtoul(*argv, &end, 0);
|
||||||
|
- if (*end || !hash || hash > 0x10000) {
|
||||||
|
- explain();
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- addattr_l(n, 4096, TCA_TCINDEX_HASH, &hash,
|
||||||
|
- sizeof(hash));
|
||||||
|
- } else if (!strcmp(*argv,"mask")) {
|
||||||
|
- __u16 mask;
|
||||||
|
-
|
||||||
|
- NEXT_ARG();
|
||||||
|
- mask = strtoul(*argv, &end, 0);
|
||||||
|
- if (*end) {
|
||||||
|
- explain();
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- addattr_l(n, 4096, TCA_TCINDEX_MASK, &mask,
|
||||||
|
- sizeof(mask));
|
||||||
|
- } else if (!strcmp(*argv,"shift")) {
|
||||||
|
- int shift;
|
||||||
|
-
|
||||||
|
- NEXT_ARG();
|
||||||
|
- shift = strtoul(*argv, &end, 0);
|
||||||
|
- if (*end) {
|
||||||
|
- explain();
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- addattr_l(n, 4096, TCA_TCINDEX_SHIFT, &shift,
|
||||||
|
- sizeof(shift));
|
||||||
|
- } else if (!strcmp(*argv,"fall_through")) {
|
||||||
|
- int value = 1;
|
||||||
|
-
|
||||||
|
- addattr_l(n, 4096, TCA_TCINDEX_FALL_THROUGH, &value,
|
||||||
|
- sizeof(value));
|
||||||
|
- } else if (!strcmp(*argv,"pass_on")) {
|
||||||
|
- int value = 0;
|
||||||
|
-
|
||||||
|
- addattr_l(n, 4096, TCA_TCINDEX_FALL_THROUGH, &value,
|
||||||
|
- sizeof(value));
|
||||||
|
- } else if (!strcmp(*argv,"classid")) {
|
||||||
|
- __u32 handle;
|
||||||
|
-
|
||||||
|
- NEXT_ARG();
|
||||||
|
- if (get_tc_classid(&handle, *argv)) {
|
||||||
|
- fprintf(stderr, "Illegal \"classid\"\n");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- addattr_l(n, 4096, TCA_TCINDEX_CLASSID, &handle, 4);
|
||||||
|
- } else if (!strcmp(*argv,"police")) {
|
||||||
|
- NEXT_ARG();
|
||||||
|
- if (parse_police(&argc, &argv, TCA_TCINDEX_POLICE, n)) {
|
||||||
|
- fprintf(stderr, "Illegal \"police\"\n");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- continue;
|
||||||
|
- } else if (!strcmp(*argv,"action")) {
|
||||||
|
- NEXT_ARG();
|
||||||
|
- if (parse_action(&argc, &argv, TCA_TCINDEX_ACT, n)) {
|
||||||
|
- fprintf(stderr, "Illegal \"action\"\n");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- continue;
|
||||||
|
- } else {
|
||||||
|
- explain();
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- argc--;
|
||||||
|
- argv++;
|
||||||
|
- }
|
||||||
|
- addattr_nest_end(n, tail);
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-static int tcindex_print_opt(struct filter_util *qu, FILE *f,
|
||||||
|
- struct rtattr *opt, __u32 handle)
|
||||||
|
-{
|
||||||
|
- struct rtattr *tb[TCA_TCINDEX_MAX+1];
|
||||||
|
-
|
||||||
|
- if (opt == NULL)
|
||||||
|
- return 0;
|
||||||
|
-
|
||||||
|
- parse_rtattr_nested(tb, TCA_TCINDEX_MAX, opt);
|
||||||
|
-
|
||||||
|
- if (handle != ~0) fprintf(f, "handle 0x%04x ", handle);
|
||||||
|
- if (tb[TCA_TCINDEX_HASH]) {
|
||||||
|
- __u16 hash;
|
||||||
|
-
|
||||||
|
- if (RTA_PAYLOAD(tb[TCA_TCINDEX_HASH]) < sizeof(hash))
|
||||||
|
- return -1;
|
||||||
|
- hash = rta_getattr_u16(tb[TCA_TCINDEX_HASH]);
|
||||||
|
- fprintf(f, "hash %d ", hash);
|
||||||
|
- }
|
||||||
|
- if (tb[TCA_TCINDEX_MASK]) {
|
||||||
|
- __u16 mask;
|
||||||
|
-
|
||||||
|
- if (RTA_PAYLOAD(tb[TCA_TCINDEX_MASK]) < sizeof(mask))
|
||||||
|
- return -1;
|
||||||
|
- mask = rta_getattr_u16(tb[TCA_TCINDEX_MASK]);
|
||||||
|
- fprintf(f, "mask 0x%04x ", mask);
|
||||||
|
- }
|
||||||
|
- if (tb[TCA_TCINDEX_SHIFT]) {
|
||||||
|
- int shift;
|
||||||
|
-
|
||||||
|
- if (RTA_PAYLOAD(tb[TCA_TCINDEX_SHIFT]) < sizeof(shift))
|
||||||
|
- return -1;
|
||||||
|
- shift = rta_getattr_u32(tb[TCA_TCINDEX_SHIFT]);
|
||||||
|
- fprintf(f, "shift %d ", shift);
|
||||||
|
- }
|
||||||
|
- if (tb[TCA_TCINDEX_FALL_THROUGH]) {
|
||||||
|
- int fall_through;
|
||||||
|
-
|
||||||
|
- if (RTA_PAYLOAD(tb[TCA_TCINDEX_FALL_THROUGH]) <
|
||||||
|
- sizeof(fall_through))
|
||||||
|
- return -1;
|
||||||
|
- fall_through = rta_getattr_u32(tb[TCA_TCINDEX_FALL_THROUGH]);
|
||||||
|
- fprintf(f, fall_through ? "fall_through " : "pass_on ");
|
||||||
|
- }
|
||||||
|
- if (tb[TCA_TCINDEX_CLASSID]) {
|
||||||
|
- SPRINT_BUF(b1);
|
||||||
|
- fprintf(f, "classid %s ", sprint_tc_classid(*(__u32 *)
|
||||||
|
- RTA_DATA(tb[TCA_TCINDEX_CLASSID]), b1));
|
||||||
|
- }
|
||||||
|
- if (tb[TCA_TCINDEX_POLICE]) {
|
||||||
|
- fprintf(f, "\n");
|
||||||
|
- tc_print_police(f, tb[TCA_TCINDEX_POLICE]);
|
||||||
|
- }
|
||||||
|
- if (tb[TCA_TCINDEX_ACT]) {
|
||||||
|
- fprintf(f, "\n");
|
||||||
|
- tc_print_action(f, tb[TCA_TCINDEX_ACT], 0);
|
||||||
|
- }
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-struct filter_util tcindex_filter_util = {
|
||||||
|
- .id = "tcindex",
|
||||||
|
- .parse_fopt = tcindex_parse_opt,
|
||||||
|
- .print_fopt = tcindex_print_opt,
|
||||||
|
-};
|
||||||
24
iproute.spec
24
iproute.spec
@ -2,7 +2,7 @@
|
|||||||
Name: iproute
|
Name: iproute
|
||||||
Version: 5.15.0
|
Version: 5.15.0
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Release: 18
|
Release: 19
|
||||||
Summary: Linux network configuration utilities
|
Summary: Linux network configuration utilities
|
||||||
License: GPLv2+ and Public Domain
|
License: GPLv2+ and Public Domain
|
||||||
URL: https://kernel.org/pub/linux/utils/net/iproute2/
|
URL: https://kernel.org/pub/linux/utils/net/iproute2/
|
||||||
@ -59,6 +59,15 @@ Patch6042: backport-ss-Fix-socket-type-check-in-packet_show_line.patch
|
|||||||
Patch6043: backport-ss-print-unix-socket-ports-as-unsigned-int-inode.patch
|
Patch6043: backport-ss-print-unix-socket-ports-as-unsigned-int-inode.patch
|
||||||
Patch6044: backport-utils-fix-get_integer-logic.patch
|
Patch6044: backport-utils-fix-get_integer-logic.patch
|
||||||
|
|
||||||
|
patch6045: backport-lnstat-Fix-deref-of-null-in-print_json-function.patch
|
||||||
|
patch6046: backport-iproute2-prevent-memory-leak.patch
|
||||||
|
patch6047: backport-libnetlink-validate-nlmsg-header-length-first.patch
|
||||||
|
patch6048: backport-tc-remove-tcindex-classifier.patch
|
||||||
|
patch6049: backport-ip-fix-memory-leak-in-ip-maddr-show.patch
|
||||||
|
patch6050: backport-ila-fix-potential-snprintf-buffer-overflow.patch
|
||||||
|
patch6051: backport-bridge-fix-potential-snprintf-overflow.patch
|
||||||
|
patch6052: backport-mnl_utils-sanitize-incoming-netlink-payload-size-in-callbacks.patch
|
||||||
|
|
||||||
Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch
|
Patch9000: feature-iproute-add-support-for-ipvlan-l2e-mode.patch
|
||||||
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
|
Patch9001: bugfix-iproute2-cancel-some-test-cases.patch
|
||||||
Patch9002: feature-iproute2-supports-to-parse-UB-device-and-related-display-of-vf-address.patch
|
Patch9002: feature-iproute2-supports-to-parse-UB-device-and-related-display-of-vf-address.patch
|
||||||
@ -138,6 +147,19 @@ install -m 0644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a
|
|||||||
%{_mandir}/*
|
%{_mandir}/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Apr 16 2024 liweigang <liweiganga@uniontech.com> - 1:5.15.0-19
|
||||||
|
- Type: bugfix
|
||||||
|
- ID: NA
|
||||||
|
- SUG: NA
|
||||||
|
- DESC: lnstat: Fix deref of null in print_json() function
|
||||||
|
iproute2: prevent memory leak
|
||||||
|
libnetlink: validate nlmsg header length first
|
||||||
|
tc: remove tcindex classifier
|
||||||
|
ip: fix memory leak in 'ip maddr show'
|
||||||
|
ila: fix potential snprintf buffer overflow
|
||||||
|
bridge: fix potential snprintf overflow
|
||||||
|
mnl_utils: sanitize incoming netlink payload size in callbacks
|
||||||
|
|
||||||
* Fri Jan 12 2024 liubo <liubo335@huawei.com> - 1:5.15.0-18
|
* Fri Jan 12 2024 liubo <liubo335@huawei.com> - 1:5.15.0-18
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user