When table and vrftable are used in SRv6, ip should bail out if table
ids are not valid, and return a proper error message to the user.
Achieve this simply checking rtnl_rttable_a2n return value, as we
already do in the rest of iproute.
Fixes: 0486388a877a ("add support for table name in SRv6 End.DT* behaviors")
Fixes: 69629b4e43c4 ("seg6: add support for vrftable attribute in SRv6
End.DT4/DT6 behaviors")
Signed-off-by: Andrea Claudi <[email protected]>
---
ip/iproute_lwtunnel.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c
index 1ab95cd2..566fc7ea 100644
--- a/ip/iproute_lwtunnel.c
+++ b/ip/iproute_lwtunnel.c
@@ -891,13 +891,15 @@ static int parse_encap_seg6local(struct rtattr *rta,
size_t len, int *argcp,
NEXT_ARG();
if (table_ok++)
duparg2("table", *argv);
- rtnl_rttable_a2n(&table, *argv);
+ if (rtnl_rttable_a2n(&table, *argv))
+ invarg("invalid table id\n", *argv);
ret = rta_addattr32(rta, len, SEG6_LOCAL_TABLE, table);
} else if (strcmp(*argv, "vrftable") == 0) {
NEXT_ARG();
if (vrftable_ok++)
duparg2("vrftable", *argv);
- rtnl_rttable_a2n(&vrftable, *argv);
+ if (rtnl_rttable_a2n(&vrftable, *argv))
+ invarg("invalid vrf table id\n", *argv);
ret = rta_addattr32(rta, len, SEG6_LOCAL_VRFTABLE,
vrftable);
} else if (strcmp(*argv, "nh4") == 0) {
--
2.29.2