All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][meta-networking][V2] ebtables: make it be able to work on 64bit kernel with 32 bit userspace
@ 2014-11-12  2:01 rongqing.li
  2014-11-19  2:10 ` Rongqing Li
  0 siblings, 1 reply; 2+ messages in thread
From: rongqing.li @ 2014-11-12  2:01 UTC (permalink / raw)
  To: openembedded-devel

From: "Roy.Li" <rongqing.li@windriver.com>

Some structs, which is used to communicate between user space and kernel,
have the alignment issue on 64bit kernel with 32 bit userspace. To fix
this issue, ebtables redefines these struct, not use the kernel(sysroot)
include/uapi/linux/netfilter_bridge/ebtables.h, like ebt_entry_target:

The kernel's:
struct ebt_entry_target {
        union {
                char name[EBT_FUNCTION_MAXNAMELEN];
                struct xt_target *target;
        } u;
        /* size of data */
        unsigned int target_size;
        unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
};

The ebtables:
struct ebt_entry_target
{
        union {
                char name[EBT_FUNCTION_MAXNAMELEN];
                struct ebt_target *target;
        } u;
        /* size of data */
        unsigned int target_size;
|#ifdef KERNEL_64_USERSPACE_32
        unsigned int pad;
|#endif
        unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
};

To make it work on 64bit kernel and 32bit userspace, KERNEL_64_USERSPACE_32
is needed to be enabled.

If the MLPREFIX of package matchs "lib.?32", the 32bit multilib  package on
64bit kernel is being built.

Signed-off-by: Roy.Li <rongqing.li@windriver.com>
---
 meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb b/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
index 32cfc75..ca084e3 100644
--- a/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
+++ b/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
@@ -27,6 +27,17 @@ S = "${WORKDIR}/ebtables-v${PV}"
 
 inherit update-rc.d systemd
 
+python __anonymous () {
+    import re
+
+    multilib = d.getVar('MLPREFIX', True)
+    if multilib:
+        searchstr = "lib.?32"
+        reg = re.compile(searchstr)
+        if reg.search(multilib):
+            d.appendVar('CFLAGS' ,' -DKERNEL_64_USERSPACE_32 -DEBT_MIN_ALIGN=8')
+}
+
 EXTRA_OEMAKE = " \
         BINDIR=${base_sbindir} \
         MANDIR=${mandir} \
-- 
2.1.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH][meta-networking][V2] ebtables: make it be able to work on 64bit kernel with 32 bit userspace
  2014-11-12  2:01 [PATCH][meta-networking][V2] ebtables: make it be able to work on 64bit kernel with 32 bit userspace rongqing.li
@ 2014-11-19  2:10 ` Rongqing Li
  0 siblings, 0 replies; 2+ messages in thread
From: Rongqing Li @ 2014-11-19  2:10 UTC (permalink / raw)
  To: openembedded-devel

Please drop it, it make x86 unable to work

-Roy

On 2014年11月12日 10:01, rongqing.li@windriver.com wrote:
> From: "Roy.Li" <rongqing.li@windriver.com>
>
> Some structs, which is used to communicate between user space and kernel,
> have the alignment issue on 64bit kernel with 32 bit userspace. To fix
> this issue, ebtables redefines these struct, not use the kernel(sysroot)
> include/uapi/linux/netfilter_bridge/ebtables.h, like ebt_entry_target:
>
> The kernel's:
> struct ebt_entry_target {
>          union {
>                  char name[EBT_FUNCTION_MAXNAMELEN];
>                  struct xt_target *target;
>          } u;
>          /* size of data */
>          unsigned int target_size;
>          unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
> };
>
> The ebtables:
> struct ebt_entry_target
> {
>          union {
>                  char name[EBT_FUNCTION_MAXNAMELEN];
>                  struct ebt_target *target;
>          } u;
>          /* size of data */
>          unsigned int target_size;
> |#ifdef KERNEL_64_USERSPACE_32
>          unsigned int pad;
> |#endif
>          unsigned char data[0] __attribute__ ((aligned (__alignof__(struct ebt_replace))));
> };
>
> To make it work on 64bit kernel and 32bit userspace, KERNEL_64_USERSPACE_32
> is needed to be enabled.
>
> If the MLPREFIX of package matchs "lib.?32", the 32bit multilib  package on
> 64bit kernel is being built.
>
> Signed-off-by: Roy.Li <rongqing.li@windriver.com>
> ---
>   meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb | 11 +++++++++++
>   1 file changed, 11 insertions(+)
>
> diff --git a/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb b/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
> index 32cfc75..ca084e3 100644
> --- a/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
> +++ b/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
> @@ -27,6 +27,17 @@ S = "${WORKDIR}/ebtables-v${PV}"
>
>   inherit update-rc.d systemd
>
> +python __anonymous () {
> +    import re
> +
> +    multilib = d.getVar('MLPREFIX', True)
> +    if multilib:
> +        searchstr = "lib.?32"
> +        reg = re.compile(searchstr)
> +        if reg.search(multilib):
> +            d.appendVar('CFLAGS' ,' -DKERNEL_64_USERSPACE_32 -DEBT_MIN_ALIGN=8')
> +}
> +
>   EXTRA_OEMAKE = " \
>           BINDIR=${base_sbindir} \
>           MANDIR=${mandir} \
>

-- 
Best Reagrds,
Roy | RongQing Li


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-11-19  2:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-12  2:01 [PATCH][meta-networking][V2] ebtables: make it be able to work on 64bit kernel with 32 bit userspace rongqing.li
2014-11-19  2:10 ` Rongqing Li

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.