diff options
author | Kristof Provost <kp@FreeBSD.org> | 2022-01-05 20:31:02 +0000 |
---|---|---|
committer | Kristof Provost <kp@FreeBSD.org> | 2022-02-18 10:14:58 +0000 |
commit | b5f6f687a2eea520d93f2c1ca4e04efd7c2e367f (patch) | |
tree | 0c346c993ae7dd82e65c3fcddd78af5d23aff002 | |
parent | 1e261cb8c6dfd8a7c0e5193fd0f43ca732f639d4 (diff) | |
download | src-b5f6f687a2eea520d93f2c1ca4e04efd7c2e367f.tar.gz src-b5f6f687a2eea520d93f2c1ca4e04efd7c2e367f.zip |
pfctl: improve error reporting for routehost
If an invalid (i.e. overly long) interface name is specified error out
immediately, rather than in expand_rule() so we point at the incorrect
line.
PR: 260958
MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D34008
(cherry picked from commit e68de6694381748b7578703b22580c0f17780b32)
-rw-r--r-- | sbin/pfctl/parse.y | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y index c075a0d4607c..885b4f5ce50a 100644 --- a/sbin/pfctl/parse.y +++ b/sbin/pfctl/parse.y @@ -4544,6 +4544,10 @@ route_host : STRING { $$ = calloc(1, sizeof(struct node_host)); if ($$ == NULL) err(1, "route_host: calloc"); + if (strlen($1) >= IFNAMSIZ) { + yyerror("interface name too long"); + YYERROR; + } $$->ifname = strdup($1); set_ipmask($$, 128); $$->next = NULL; @@ -4553,8 +4557,13 @@ route_host : STRING { struct node_host *n; $$ = $3; - for (n = $3; n != NULL; n = n->next) + for (n = $3; n != NULL; n = n->next) { + if (strlen($2) >= IFNAMSIZ) { + yyerror("interface name too long"); + YYERROR; + } n->ifname = strdup($2); + } } ; |