Commit fd0ec0e6216baea854465bbdb177f2d1b2ccaf22
1 parent
d2a7b6bad2
Exists in
master
and in
39 other branches
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 | { |