David S. Miller wrote: > Looks good to me, I'll pass this along to the netfilter maintainers.
Actually i'm still doing a kmalloc for replsize->counter, that may work, but since we're cleaning up it should be a vmalloc too (specially since i'm doing a vfree). Second time is the charm :) -- Gustavo Zacarias Gentoo/SPARC monkey
diff -Nura linux-2.4.31/arch/sparc64/kernel/sys_sparc32.c linux-2.4.31.netfilter/arch/sparc64/kernel/sys_sparc32.c
--- linux-2.4.31/arch/sparc64/kernel/sys_sparc32.c 2005-04-03 22:42:19.000000000 -0300
+++ linux-2.4.31.netfilter/arch/sparc64/kernel/sys_sparc32.c 2005-08-22 14:14:40.000000000 -0300
@@ -50,6 +50,7 @@
#include <linux/in.h>
#include <linux/icmpv6.h>
#include <linux/sysctl.h>
+#include <linux/vmalloc.h>
#include <linux/dnotify.h>
#include <linux/netfilter_ipv4/ip_tables.h>
@@ -2919,12 +2920,12 @@
if (optlen != kreplsize)
return -ENOPROTOOPT;
- krepl = (struct ipt_replace *)kmalloc(kreplsize, GFP_KERNEL);
+ krepl = (struct ipt_replace *)vmalloc(kreplsize);
if (krepl == NULL)
return -ENOMEM;
if (copy_from_user(krepl, optval, kreplsize)) {
- kfree(krepl);
+ vfree(krepl);
return -EFAULT;
}
@@ -2932,10 +2933,9 @@
((struct ipt_replace32 *)krepl)->counters);
kcountersize = krepl->num_counters * sizeof(struct ipt_counters);
- krepl->counters = (struct ipt_counters *)kmalloc(
- kcountersize, GFP_KERNEL);
+ krepl->counters = (struct ipt_counters *)vmalloc(kcountersize);
if (krepl->counters == NULL) {
- kfree(krepl);
+ vfree(krepl);
return -ENOMEM;
}
@@ -2949,8 +2949,8 @@
copy_to_user(counters32, krepl->counters, kcountersize))
ret = -EFAULT;
- kfree(krepl->counters);
- kfree(krepl);
+ vfree(krepl->counters);
+ vfree(krepl);
return ret;
}
signature.asc
Description: OpenPGP digital signature
