[EBTABLES]: Move calls of ebt_verify_pointers() upstream.
... and pass just repl->name to translate_table() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
f7da79d998
Коммит
1bc2326cbe
|
@ -774,17 +774,12 @@ letscontinue:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* do the parsing of the table/chains/entries/matches/watchers/targets, heh */
|
/* do the parsing of the table/chains/entries/matches/watchers/targets, heh */
|
||||||
static int translate_table(struct ebt_replace *repl,
|
static int translate_table(char *name, struct ebt_table_info *newinfo)
|
||||||
struct ebt_table_info *newinfo)
|
|
||||||
{
|
{
|
||||||
unsigned int i, j, k, udc_cnt;
|
unsigned int i, j, k, udc_cnt;
|
||||||
int ret;
|
int ret;
|
||||||
struct ebt_cl_stack *cl_s = NULL; /* used in the checking for chain loops */
|
struct ebt_cl_stack *cl_s = NULL; /* used in the checking for chain loops */
|
||||||
|
|
||||||
ret = ebt_verify_pointers(repl, newinfo);
|
|
||||||
if (ret != 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < NF_BR_NUMHOOKS && !newinfo->hook_entry[i])
|
while (i < NF_BR_NUMHOOKS && !newinfo->hook_entry[i])
|
||||||
i++;
|
i++;
|
||||||
|
@ -889,7 +884,7 @@ static int translate_table(struct ebt_replace *repl,
|
||||||
/* used to know what we need to clean up if something goes wrong */
|
/* used to know what we need to clean up if something goes wrong */
|
||||||
i = 0;
|
i = 0;
|
||||||
ret = EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
|
ret = EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
|
||||||
ebt_check_entry, newinfo, repl->name, &i, cl_s, udc_cnt);
|
ebt_check_entry, newinfo, name, &i, cl_s, udc_cnt);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
|
EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
|
||||||
ebt_cleanup_entry, &i);
|
ebt_cleanup_entry, &i);
|
||||||
|
@ -986,7 +981,11 @@ static int do_replace(void __user *user, unsigned int len)
|
||||||
|
|
||||||
/* this can get initialized by translate_table() */
|
/* this can get initialized by translate_table() */
|
||||||
newinfo->chainstack = NULL;
|
newinfo->chainstack = NULL;
|
||||||
ret = translate_table(&tmp, newinfo);
|
ret = ebt_verify_pointers(&tmp, newinfo);
|
||||||
|
if (ret != 0)
|
||||||
|
goto free_counterstmp;
|
||||||
|
|
||||||
|
ret = translate_table(tmp.name, newinfo);
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
goto free_counterstmp;
|
goto free_counterstmp;
|
||||||
|
@ -1185,7 +1184,10 @@ int ebt_register_table(struct ebt_table *table)
|
||||||
|
|
||||||
/* fill in newinfo and parse the entries */
|
/* fill in newinfo and parse the entries */
|
||||||
newinfo->chainstack = NULL;
|
newinfo->chainstack = NULL;
|
||||||
ret = translate_table(table->table, newinfo);
|
ret = ebt_verify_pointers(table->table, newinfo);
|
||||||
|
if (ret != 0)
|
||||||
|
goto free_chainstack;
|
||||||
|
ret = translate_table(table->table->name, newinfo);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
BUGPRINT("Translate_table failed\n");
|
BUGPRINT("Translate_table failed\n");
|
||||||
goto free_chainstack;
|
goto free_chainstack;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче