* [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. @ 2008-02-29 8:28 Pavel Emelyanov 2008-02-29 12:48 ` Patrick McHardy 0 siblings, 1 reply; 7+ messages in thread From: Pavel Emelyanov @ 2008-02-29 8:28 UTC (permalink / raw) To: David Miller; +Cc: Patrick McHardy, Linux Netdev List I've sent this patch some days ago to Bart, but with no answer... When trying to do # ebtables -A FORWARD --among-src 0:12:34:56:78:9a=192.168.0.10 -j ACCEPT on x86_64 box the ebt_among->check() callback warns me that ebtables: among: wrong size: 1060 against expected 1056, rounded to 1056 Checking the ebtables sources, I found that the alignment is done differently in the tool and the kernel. Tool makes it like this: EBT_ALIGN(sizeof(struct ebt_among_info)) + X while the kernel module like this: EBT_ALIGN(sizeof(struct ebt_among_info) + X) So the suggested fix is to move the alignment in the kernel. After the fix the rule is added and appears in the ebtables -L output. Originally developed by Evgeny Kravtsunov. Signed-off-by: Evgeny Kravtsunov <emkravts@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@openvz.org> --- diff --git a/net/bridge/netfilter/ebt_among.c b/net/bridge/netfilter/ebt_among.c index 70b6dca..349a543 100644 --- a/net/bridge/netfilter/ebt_among.c +++ b/net/bridge/netfilter/ebt_among.c @@ -182,7 +182,7 @@ static int ebt_among_check(const char *tablename, unsigned int hookmask, unsigned int datalen) { const struct ebt_among_info *info = data; - int expected_length = sizeof(struct ebt_among_info); + int expected_length = EBT_ALIGN(sizeof(struct ebt_among_info)); const struct ebt_mac_wormhash *wh_dst, *wh_src; int err; @@ -191,7 +191,7 @@ static int ebt_among_check(const char *tablename, unsigned int hookmask, expected_length += ebt_mac_wormhash_size(wh_dst); expected_length += ebt_mac_wormhash_size(wh_src); - if (datalen != EBT_ALIGN(expected_length)) { + if (datalen != expected_length) { printk(KERN_WARNING "ebtables: among: wrong size: %d " "against expected %d, rounded to %Zd\n", ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. 2008-02-29 8:28 [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module Pavel Emelyanov @ 2008-02-29 12:48 ` Patrick McHardy 2008-02-29 15:40 ` Jan Engelhardt 2008-03-02 15:12 ` Bart De Schuymer 0 siblings, 2 replies; 7+ messages in thread From: Patrick McHardy @ 2008-02-29 12:48 UTC (permalink / raw) To: Pavel Emelyanov Cc: David Miller, Linux Netdev List, Bart De Schuymer, Netfilter Development Mailinglist Pavel Emelyanov wrote: > I've sent this patch some days ago to Bart, but with no answer... > > When trying to do > > # ebtables -A FORWARD --among-src 0:12:34:56:78:9a=192.168.0.10 -j ACCEPT > > on x86_64 box the ebt_among->check() callback warns me that > > ebtables: among: wrong size: 1060 against expected 1056, rounded to 1056 > > Checking the ebtables sources, I found that the alignment is done > differently in the tool and the kernel. Tool makes it like this: > > EBT_ALIGN(sizeof(struct ebt_among_info)) + X > > while the kernel module like this: > > EBT_ALIGN(sizeof(struct ebt_among_info) + X) > > So the suggested fix is to move the alignment in the kernel. After > the fix the rule is added and appears in the ebtables -L output. It seems the kernel is correct and userspace is doing it wrong, so I think userspace should be fixed instead. The problem with your patch is that is causes misalignment for following structures that contain u64 members. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. 2008-02-29 12:48 ` Patrick McHardy @ 2008-02-29 15:40 ` Jan Engelhardt 2008-02-29 17:23 ` Bart De Schuymer 2008-03-02 15:12 ` Bart De Schuymer 1 sibling, 1 reply; 7+ messages in thread From: Jan Engelhardt @ 2008-02-29 15:40 UTC (permalink / raw) To: Patrick McHardy Cc: Pavel Emelyanov, David Miller, Linux Netdev List, Bart De Schuymer, Netfilter Development Mailinglist On Feb 29 2008 13:48, Patrick McHardy wrote: > Pavel Emelyanov wrote: >> I've sent this patch some days ago to Bart, but with no answer... >> >> When trying to do >> >> # ebtables -A FORWARD --among-src 0:12:34:56:78:9a=192.168.0.10 -j ACCEPT >> >> on x86_64 box the ebt_among->check() callback warns me that >> >> ebtables: among: wrong size: 1060 against expected 1056, rounded to 1056 >> [...] > > It seems the kernel is correct and userspace is doing it > wrong, so I think userspace should be fixed instead. > The problem with your patch is that is causes misalignment > for following structures that contain u64 members. ebt_among is a true mess! It hinders my efforts to port ebtables to xtables, but I could of course use a hack and will likely do just that. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. 2008-02-29 15:40 ` Jan Engelhardt @ 2008-02-29 17:23 ` Bart De Schuymer 2008-02-29 18:46 ` Jan Engelhardt 0 siblings, 1 reply; 7+ messages in thread From: Bart De Schuymer @ 2008-02-29 17:23 UTC (permalink / raw) To: Jan Engelhardt Cc: Patrick McHardy, Pavel Emelyanov, David Miller, Linux Netdev List, Netfilter Development Mailinglist Op vr, 29-02-2008 te 16:40 +0100, schreef Jan Engelhardt: > > It seems the kernel is correct and userspace is doing it > > wrong, so I think userspace should be fixed instead. > > The problem with your patch is that is causes misalignment > > for following structures that contain u64 members. > > ebt_among is a true mess! It hinders my efforts to port ebtables > to xtables, but I could of course use a hack and will likely > do just that. Ebtables' dynamic memory allocation scheme is probably not portable to iptables. I agree the fix is in userspace. Anyway, I think the author of that module did a great job and provided a very useful and often-used functionality. Bart ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. 2008-02-29 17:23 ` Bart De Schuymer @ 2008-02-29 18:46 ` Jan Engelhardt 0 siblings, 0 replies; 7+ messages in thread From: Jan Engelhardt @ 2008-02-29 18:46 UTC (permalink / raw) To: Bart De Schuymer Cc: Patrick McHardy, Pavel Emelyanov, David Miller, Linux Netdev List, Netfilter Development Mailinglist On Feb 29 2008 18:23, Bart De Schuymer wrote: >Op vr, 29-02-2008 te 16:40 +0100, schreef Jan Engelhardt: >> > It seems the kernel is correct and userspace is doing it >> > wrong, so I think userspace should be fixed instead. >> > The problem with your patch is that is causes misalignment >> > for following structures that contain u64 members. >> >> ebt_among is a true mess! It hinders my efforts to port ebtables >> to xtables, but I could of course use a hack and will likely >> do just that. > >Ebtables' dynamic memory allocation scheme is probably not portable to >iptables. I agree the fix is in userspace. Anyway, I think the author of >that module did a great job and provided a very useful and often-used >functionality. Actually yes, it's kind of a weird mixup of TLV and static blocks :p ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. 2008-02-29 12:48 ` Patrick McHardy 2008-02-29 15:40 ` Jan Engelhardt @ 2008-03-02 15:12 ` Bart De Schuymer 2008-03-03 8:50 ` Pavel Emelyanov 1 sibling, 1 reply; 7+ messages in thread From: Bart De Schuymer @ 2008-03-02 15:12 UTC (permalink / raw) To: Patrick McHardy Cc: Pavel Emelyanov, David Miller, Linux Netdev List, Netfilter Development Mailinglist [-- Attachment #1: Type: text/plain, Size: 940 bytes --] Op vr, 29-02-2008 te 13:48 +0100, schreef Patrick McHardy: > Pavel Emelyanov wrote: > > I've sent this patch some days ago to Bart, but with no answer... Sorry about that. > > > > When trying to do > > > > # ebtables -A FORWARD --among-src 0:12:34:56:78:9a=192.168.0.10 -j ACCEPT > > > > on x86_64 box the ebt_among->check() callback warns me that > > > > ebtables: among: wrong size: 1060 against expected 1056, rounded to 1056 > > > > So the suggested fix is to move the alignment in the kernel. After > > the fix the rule is added and appears in the ebtables -L output. > > > It seems the kernel is correct and userspace is doing it > wrong, so I think userspace should be fixed instead. > The problem with your patch is that is causes misalignment > for following structures that contain u64 members. Pavel, please try the attached userspace patch to see if it fixes the problem (and let me know the result). cheers, Bart [-- Attachment #2: among64.diff --] [-- Type: text/x-patch, Size: 1961 bytes --] --- ebtables-v2.0.8-2/extensions/ebt_among.c.old 2008-03-02 16:08:13.000000000 +0100 +++ ebtables-v2.0.8-2/extensions/ebt_among.c 2008-03-02 16:06:55.000000000 +0100 @@ -68,6 +68,7 @@ static void print_help() " 00:00:00:fa:eb:fe=153.19.120.250,00:00:00:fa:eb:fe=192.168.0.1\n" ); } +static int old_size; static void init(struct ebt_entry_match *match) { @@ -75,6 +76,7 @@ static void init(struct ebt_entry_match (struct ebt_among_info *) match->data; memset(amonginfo, 0, sizeof(struct ebt_among_info)); + old_size = sizeof(struct ebt_among_info); } static struct ebt_mac_wormhash *new_wormhash(int n) @@ -308,7 +310,7 @@ static int parse(int c, char **argv, int (struct ebt_among_info *) (*match)->data; struct ebt_mac_wormhash *wh; struct ebt_entry_match *h; - int new_size, old_size; + int new_size; long flen; int fd; @@ -354,21 +356,23 @@ static int parse(int c, char **argv, int if (ebt_errormsg[0] != '\0') break; - old_size = sizeof(struct ebt_entry_match) + (**match).match_size; - h = malloc((new_size = old_size + ebt_mac_wormhash_size(wh))); + new_size = old_size+ebt_mac_wormhash_size(wh); + h = malloc(sizeof(struct ebt_entry_match)+EBT_ALIGN(new_size)); if (!h) ebt_print_memory(); - memcpy(h, *match, old_size); - memcpy((char *) h + old_size, wh, ebt_mac_wormhash_size(wh)); - h->match_size = new_size - sizeof(struct ebt_entry_match); + memcpy(h, *match, old_size+sizeof(struct ebt_entry_match)); + memcpy((char *)h+old_size+sizeof(struct ebt_entry_match), wh, + ebt_mac_wormhash_size(wh)); + h->match_size = EBT_ALIGN(new_size); info = (struct ebt_among_info *) h->data; if (c == AMONG_DST) { info->wh_dst_ofs = - old_size - sizeof(struct ebt_entry_match); + old_size; } else { info->wh_src_ofs = - old_size - sizeof(struct ebt_entry_match); + old_size; } + old_size = new_size; free(*match); *match = h; free(wh); ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module. 2008-03-02 15:12 ` Bart De Schuymer @ 2008-03-03 8:50 ` Pavel Emelyanov 0 siblings, 0 replies; 7+ messages in thread From: Pavel Emelyanov @ 2008-03-03 8:50 UTC (permalink / raw) To: Bart De Schuymer Cc: Patrick McHardy, David Miller, Linux Netdev List, Netfilter Development Mailinglist Bart De Schuymer wrote: > Op vr, 29-02-2008 te 13:48 +0100, schreef Patrick McHardy: >> Pavel Emelyanov wrote: >>> I've sent this patch some days ago to Bart, but with no answer... > > Sorry about that. > >>> When trying to do >>> >>> # ebtables -A FORWARD --among-src 0:12:34:56:78:9a=192.168.0.10 -j ACCEPT >>> >>> on x86_64 box the ebt_among->check() callback warns me that >>> >>> ebtables: among: wrong size: 1060 against expected 1056, rounded to 1056 >>> >>> So the suggested fix is to move the alignment in the kernel. After >>> the fix the rule is added and appears in the ebtables -L output. >> >> It seems the kernel is correct and userspace is doing it >> wrong, so I think userspace should be fixed instead. >> The problem with your patch is that is causes misalignment >> for following structures that contain u64 members. > > Pavel, please try the attached userspace patch to see if it fixes the > problem (and let me know the result). Tested - works OK. Thanks. > cheers, > Bart > > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-03-03 8:50 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-02-29 8:28 [PATCH (resend)][EBTABLES]: Fix alignment checks in ebt_among.ko module Pavel Emelyanov 2008-02-29 12:48 ` Patrick McHardy 2008-02-29 15:40 ` Jan Engelhardt 2008-02-29 17:23 ` Bart De Schuymer 2008-02-29 18:46 ` Jan Engelhardt 2008-03-02 15:12 ` Bart De Schuymer 2008-03-03 8:50 ` Pavel Emelyanov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).