|
@@ -8,7 +8,7 @@
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
*/
|
|
-
|
|
|
|
|
|
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
|
#include <linux/capability.h>
|
|
#include <linux/capability.h>
|
|
#include <linux/in.h>
|
|
#include <linux/in.h>
|
|
#include <linux/skbuff.h>
|
|
#include <linux/skbuff.h>
|
|
@@ -771,13 +771,15 @@ check_entry_size_and_hooks(struct ip6t_entry *e,
|
|
continue;
|
|
continue;
|
|
if ((unsigned char *)e - base == hook_entries[h])
|
|
if ((unsigned char *)e - base == hook_entries[h])
|
|
newinfo->hook_entry[h] = hook_entries[h];
|
|
newinfo->hook_entry[h] = hook_entries[h];
|
|
- if ((unsigned char *)e - base == underflows[h])
|
|
|
|
|
|
+ if ((unsigned char *)e - base == underflows[h]) {
|
|
|
|
+ if (!unconditional(&e->ipv6)) {
|
|
|
|
+ pr_err("Underflows must be unconditional\n");
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
newinfo->underflow[h] = underflows[h];
|
|
newinfo->underflow[h] = underflows[h];
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- /* FIXME: underflows must be unconditional, standard verdicts
|
|
|
|
- < 0 (not IP6T_RETURN). --RR */
|
|
|
|
-
|
|
|
|
/* Clear counters and comefrom */
|
|
/* Clear counters and comefrom */
|
|
e->counters = ((struct xt_counters) { 0, 0 });
|
|
e->counters = ((struct xt_counters) { 0, 0 });
|
|
e->comefrom = 0;
|
|
e->comefrom = 0;
|