]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
flower: replace XATTR_SIZE_MAX
authorStephen Hemminger <stephen@networkplumber.org>
Thu, 12 Dec 2024 22:15:59 +0000 (14:15 -0800)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 12 Dec 2024 23:22:22 +0000 (15:22 -0800)
The flower tc parser was using XATTR_SIZE_MAX from linux/limits.h,
but this constant is intended to before extended filesystem attributes
not for TC.  Replace it with a local define.

This fixes issue on systems with musl and XATTR_SIZE_MAX is not
defined in limits.h there.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
tc/f_flower.c

index 3b61c219f4c6e7440b2eebf1e12c877c0ff15d1c..6fc2c6a1ccc6cee49a97d36a72febc2f97e6b8f4 100644 (file)
@@ -10,7 +10,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <net/if.h>
-#include <linux/limits.h>
+
 #include <linux/if_arp.h>
 #include <linux/if_ether.h>
 #include <linux/ip.h>
@@ -22,6 +22,9 @@
 #include "tc_util.h"
 #include "rt_names.h"
 
+/* maximum length of options string */
+#define FLOWER_OPTS_MAX        4096
+
 #ifndef IPPROTO_L2TP
 #define IPPROTO_L2TP 115
 #endif
@@ -1252,7 +1255,7 @@ static int flower_check_enc_opt_key(char *key)
 
 static int flower_parse_enc_opts_geneve(char *str, struct nlmsghdr *n)
 {
-       char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
+       char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
        int data_len, key_len, mask_len, err;
        char *token, *slash;
        struct rtattr *nest;
@@ -1265,7 +1268,7 @@ static int flower_parse_enc_opts_geneve(char *str, struct nlmsghdr *n)
                if (slash)
                        *slash = '\0';
 
-               if ((key_len + strlen(token) > XATTR_SIZE_MAX) ||
+               if ((key_len + strlen(token) > FLOWER_OPTS_MAX) ||
                    flower_check_enc_opt_key(token))
                        return -1;
 
@@ -1275,7 +1278,7 @@ static int flower_parse_enc_opts_geneve(char *str, struct nlmsghdr *n)
 
                if (!slash) {
                        /* Pad out mask when not provided */
-                       if (mask_len + strlen(token) > XATTR_SIZE_MAX)
+                       if (mask_len + strlen(token) > FLOWER_OPTS_MAX)
                                return -1;
 
                        data_len = strlen(rindex(token, ':'));
@@ -1288,7 +1291,7 @@ static int flower_parse_enc_opts_geneve(char *str, struct nlmsghdr *n)
                        continue;
                }
 
-               if (mask_len + strlen(slash + 1) > XATTR_SIZE_MAX)
+               if (mask_len + strlen(slash + 1) > FLOWER_OPTS_MAX)
                        return -1;
 
                strcpy(&mask[mask_len], slash + 1);
@@ -1318,7 +1321,7 @@ static int flower_parse_enc_opts_geneve(char *str, struct nlmsghdr *n)
 
 static int flower_parse_enc_opts_vxlan(char *str, struct nlmsghdr *n)
 {
-       char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
+       char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
        struct rtattr *nest;
        char *slash;
        int err;
@@ -1326,14 +1329,14 @@ static int flower_parse_enc_opts_vxlan(char *str, struct nlmsghdr *n)
        slash = strchr(str, '/');
        if (slash) {
                *slash++ = '\0';
-               if (strlen(slash) > XATTR_SIZE_MAX)
+               if (strlen(slash) > FLOWER_OPTS_MAX)
                        return -1;
                strcpy(mask, slash);
        } else {
                strcpy(mask, "0xffffffff");
        }
 
-       if (strlen(str) > XATTR_SIZE_MAX)
+       if (strlen(str) > FLOWER_OPTS_MAX)
                return -1;
        strcpy(key, str);
 
@@ -1355,7 +1358,7 @@ static int flower_parse_enc_opts_vxlan(char *str, struct nlmsghdr *n)
 
 static int flower_parse_enc_opts_erspan(char *str, struct nlmsghdr *n)
 {
-       char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
+       char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
        struct rtattr *nest;
        char *slash;
        int err;
@@ -1364,7 +1367,7 @@ static int flower_parse_enc_opts_erspan(char *str, struct nlmsghdr *n)
        slash = strchr(str, '/');
        if (slash) {
                *slash++ = '\0';
-               if (strlen(slash) > XATTR_SIZE_MAX)
+               if (strlen(slash) > FLOWER_OPTS_MAX)
                        return -1;
                strcpy(mask, slash);
        } else {
@@ -1376,7 +1379,7 @@ static int flower_parse_enc_opts_erspan(char *str, struct nlmsghdr *n)
                strcpy(mask + index, ":0xffffffff:0xff:0xff");
        }
 
-       if (strlen(str) > XATTR_SIZE_MAX)
+       if (strlen(str) > FLOWER_OPTS_MAX)
                return -1;
        strcpy(key, str);
 
@@ -1398,7 +1401,7 @@ static int flower_parse_enc_opts_erspan(char *str, struct nlmsghdr *n)
 
 static int flower_parse_enc_opts_gtp(char *str, struct nlmsghdr *n)
 {
-       char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
+       char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
        struct rtattr *nest;
        char *slash;
        int err;
@@ -1406,13 +1409,13 @@ static int flower_parse_enc_opts_gtp(char *str, struct nlmsghdr *n)
        slash = strchr(str, '/');
        if (slash) {
                *slash++ = '\0';
-               if (strlen(slash) > XATTR_SIZE_MAX)
+               if (strlen(slash) > FLOWER_OPTS_MAX)
                        return -1;
                strcpy(mask, slash);
        } else
                strcpy(mask, "ff:ff");
 
-       if (strlen(str) > XATTR_SIZE_MAX)
+       if (strlen(str) > FLOWER_OPTS_MAX)
                return -1;
        strcpy(key, str);
 
@@ -1433,7 +1436,7 @@ static int flower_parse_enc_opts_gtp(char *str, struct nlmsghdr *n)
 
 static int flower_parse_enc_opts_pfcp(char *str, struct nlmsghdr *n)
 {
-       char key[XATTR_SIZE_MAX], mask[XATTR_SIZE_MAX];
+       char key[FLOWER_OPTS_MAX], mask[FLOWER_OPTS_MAX];
        struct rtattr *nest;
        char *slash;
        int err;
@@ -1442,14 +1445,14 @@ static int flower_parse_enc_opts_pfcp(char *str, struct nlmsghdr *n)
        slash = strchr(str, '/');
        if (slash) {
                *slash++ = '\0';
-               if (strlen(slash) > XATTR_SIZE_MAX)
+               if (strlen(slash) > FLOWER_OPTS_MAX)
                        return -1;
                strcpy(mask, slash);
        } else {
                strcpy(mask, "ff:ffffffffffffffff");
        }
 
-       if (strlen(str) > XATTR_SIZE_MAX)
+       if (strlen(str) > FLOWER_OPTS_MAX)
                return -1;
        strcpy(key, str);