Commit fd0ec0e6216baea854465bbdb177f2d1b2ccaf22

Authored by Jan Engelhardt
1 parent d2a7b6bad2

netfilter: xtables: consolidate code into xt_request_find_match

Signed-off-by: Jan Engelhardt <jengelh@medozas.de>

Showing 5 changed files with 30 additions and 24 deletions Side-by-side Diff

include/linux/netfilter/x_tables.h
... ... @@ -436,6 +436,8 @@
436 436  
437 437 extern struct xt_match *xt_find_match(u8 af, const char *name, u8 revision);
438 438 extern struct xt_target *xt_find_target(u8 af, const char *name, u8 revision);
  439 +extern struct xt_match *xt_request_find_match(u8 af, const char *name,
  440 + u8 revision);
439 441 extern struct xt_target *xt_request_find_target(u8 af, const char *name,
440 442 u8 revision);
441 443 extern int xt_find_revision(u8 af, const char *name, u8 revision,
net/bridge/netfilter/ebtables.c
... ... @@ -361,12 +361,9 @@
361 361 left - sizeof(struct ebt_entry_match) < m->match_size)
362 362 return -EINVAL;
363 363  
364   - match = try_then_request_module(xt_find_match(NFPROTO_BRIDGE,
365   - m->u.name, 0), "ebt_%s", m->u.name);
  364 + match = xt_request_find_match(NFPROTO_BRIDGE, m->u.name, 0);
366 365 if (IS_ERR(match))
367 366 return PTR_ERR(match);
368   - if (match == NULL)
369   - return -ENOENT;
370 367 m->u.match = match;
371 368  
372 369 par->match = match;
net/ipv4/netfilter/ip_tables.c
... ... @@ -629,12 +629,11 @@
629 629 struct xt_match *match;
630 630 int ret;
631 631  
632   - match = try_then_request_module(xt_find_match(AF_INET, m->u.user.name,
633   - m->u.user.revision),
634   - "ipt_%s", m->u.user.name);
635   - if (IS_ERR(match) || !match) {
  632 + match = xt_request_find_match(NFPROTO_IPV4, m->u.user.name,
  633 + m->u.user.revision);
  634 + if (IS_ERR(match)) {
636 635 duprintf("find_check_match: `%s' not found\n", m->u.user.name);
637   - return match ? PTR_ERR(match) : -ENOENT;
  636 + return PTR_ERR(match);
638 637 }
639 638 m->u.kernel.match = match;
640 639  
641 640  
... ... @@ -1472,13 +1471,12 @@
1472 1471 {
1473 1472 struct xt_match *match;
1474 1473  
1475   - match = try_then_request_module(xt_find_match(AF_INET, m->u.user.name,
1476   - m->u.user.revision),
1477   - "ipt_%s", m->u.user.name);
1478   - if (IS_ERR(match) || !match) {
  1474 + match = xt_request_find_match(NFPROTO_IPV4, m->u.user.name,
  1475 + m->u.user.revision);
  1476 + if (IS_ERR(match)) {
1479 1477 duprintf("compat_check_calc_match: `%s' not found\n",
1480 1478 m->u.user.name);
1481   - return match ? PTR_ERR(match) : -ENOENT;
  1479 + return PTR_ERR(match);
1482 1480 }
1483 1481 m->u.kernel.match = match;
1484 1482 *size += xt_compat_match_offset(match);
net/ipv6/netfilter/ip6_tables.c
... ... @@ -660,12 +660,11 @@
660 660 struct xt_match *match;
661 661 int ret;
662 662  
663   - match = try_then_request_module(xt_find_match(AF_INET6, m->u.user.name,
664   - m->u.user.revision),
665   - "ip6t_%s", m->u.user.name);
666   - if (IS_ERR(match) || !match) {
  663 + match = xt_request_find_match(NFPROTO_IPV6, m->u.user.name,
  664 + m->u.user.revision);
  665 + if (IS_ERR(match)) {
667 666 duprintf("find_check_match: `%s' not found\n", m->u.user.name);
668   - return match ? PTR_ERR(match) : -ENOENT;
  667 + return PTR_ERR(match);
669 668 }
670 669 m->u.kernel.match = match;
671 670  
672 671  
... ... @@ -1506,13 +1505,12 @@
1506 1505 {
1507 1506 struct xt_match *match;
1508 1507  
1509   - match = try_then_request_module(xt_find_match(AF_INET6, m->u.user.name,
1510   - m->u.user.revision),
1511   - "ip6t_%s", m->u.user.name);
1512   - if (IS_ERR(match) || !match) {
  1508 + match = xt_request_find_match(NFPROTO_IPV6, m->u.user.name,
  1509 + m->u.user.revision);
  1510 + if (IS_ERR(match)) {
1513 1511 duprintf("compat_check_calc_match: `%s' not found\n",
1514 1512 m->u.user.name);
1515   - return match ? PTR_ERR(match) : -ENOENT;
  1513 + return PTR_ERR(match);
1516 1514 }
1517 1515 m->u.kernel.match = match;
1518 1516 *size += xt_compat_match_offset(match);
net/netfilter/x_tables.c
... ... @@ -214,6 +214,17 @@
214 214 }
215 215 EXPORT_SYMBOL(xt_find_match);
216 216  
  217 +struct xt_match *
  218 +xt_request_find_match(uint8_t nfproto, const char *name, uint8_t revision)
  219 +{
  220 + struct xt_match *match;
  221 +
  222 + match = try_then_request_module(xt_find_match(nfproto, name, revision),
  223 + "%st_%s", xt_prefix[nfproto], name);
  224 + return (match != NULL) ? match : ERR_PTR(-ENOENT);
  225 +}
  226 +EXPORT_SYMBOL_GPL(xt_request_find_match);
  227 +
217 228 /* Find target, grabs ref. Returns ERR_PTR() on error. */
218 229 struct xt_target *xt_find_target(u8 af, const char *name, u8 revision)
219 230 {