diff options
| author | Patrick McHardy <kaber@trash.net> | 2006-08-01 02:47:31 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2006-08-02 16:38:29 -0400 |
| commit | 3ab720881b6e36bd5190a3a11cee8d8d067c4ad7 (patch) | |
| tree | 7c0b9542623555a85476ede5e2a5a5d2c9c734a2 | |
| parent | b10866fd7dd9ae9b8dd03646d28702a76d624474 (diff) | |
[NETFILTER]: xt_hashlimit/xt_string: missing string validation
The hashlimit table name and the textsearch algorithm need to be
terminated, the textsearch pattern length must not exceed the
maximum size.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/ipv4/netfilter/ipt_hashlimit.c | 3 | ||||
| -rw-r--r-- | net/netfilter/xt_string.c | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/net/ipv4/netfilter/ipt_hashlimit.c b/net/ipv4/netfilter/ipt_hashlimit.c index 92980ab8ce48..6b662449e825 100644 --- a/net/ipv4/netfilter/ipt_hashlimit.c +++ b/net/ipv4/netfilter/ipt_hashlimit.c | |||
| @@ -508,6 +508,9 @@ hashlimit_checkentry(const char *tablename, | |||
| 508 | if (!r->cfg.expire) | 508 | if (!r->cfg.expire) |
| 509 | return 0; | 509 | return 0; |
| 510 | 510 | ||
| 511 | if (r->name[sizeof(r->name) - 1] != '\0') | ||
| 512 | return 0; | ||
| 513 | |||
| 511 | /* This is the best we've got: We cannot release and re-grab lock, | 514 | /* This is the best we've got: We cannot release and re-grab lock, |
| 512 | * since checkentry() is called before ip_tables.c grabs ipt_mutex. | 515 | * since checkentry() is called before ip_tables.c grabs ipt_mutex. |
| 513 | * We also cannot grab the hashtable spinlock, since htable_create will | 516 | * We also cannot grab the hashtable spinlock, since htable_create will |
diff --git a/net/netfilter/xt_string.c b/net/netfilter/xt_string.c index 0ebb6ac2c8c7..d8e3891b5f8b 100644 --- a/net/netfilter/xt_string.c +++ b/net/netfilter/xt_string.c | |||
| @@ -55,7 +55,10 @@ static int checkentry(const char *tablename, | |||
| 55 | /* Damn, can't handle this case properly with iptables... */ | 55 | /* Damn, can't handle this case properly with iptables... */ |
| 56 | if (conf->from_offset > conf->to_offset) | 56 | if (conf->from_offset > conf->to_offset) |
| 57 | return 0; | 57 | return 0; |
| 58 | 58 | if (conf->algo[XT_STRING_MAX_ALGO_NAME_SIZE - 1] != '\0') | |
| 59 | return 0; | ||
| 60 | if (conf->patlen > XT_STRING_MAX_PATTERN_SIZE) | ||
| 61 | return 0; | ||
| 59 | ts_conf = textsearch_prepare(conf->algo, conf->pattern, conf->patlen, | 62 | ts_conf = textsearch_prepare(conf->algo, conf->pattern, conf->patlen, |
| 60 | GFP_KERNEL, TS_AUTOLOAD); | 63 | GFP_KERNEL, TS_AUTOLOAD); |
| 61 | if (IS_ERR(ts_conf)) | 64 | if (IS_ERR(ts_conf)) |
