Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Jan 2011 22:09:33 +0000
From:      Alexander Best <arundel@freebsd.org>
To:        Chagin Dmitry <dchagin@freebsd.org>
Cc:        oleg.ginzburg@nevosoft.ru, freebsd-emulation@freebsd.org
Subject:   Re: kern/145024: [linux] kernel crash by linux.ko module with nooptions COMPAT_FREEBSD32
Message-ID:  <20110130220933.GA37241@freebsd.org>
In-Reply-To: <20110130195752.GA25223@freebsd.org>
References:  <201101301827.p0UIRrnk089915@freefall.freebsd.org> <20110130184157.GA11074@dchagin.static.corbina.ru> <20110130185924.GA19604@freebsd.org> <20110130191336.GA34554@dchagin.static.corbina.ru> <20110130195752.GA25223@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun Jan 30 11, Alexander Best wrote:
> On Sun Jan 30 11, Chagin Dmitry wrote:
> > On Sun, Jan 30, 2011 at 06:59:24PM +0000, Alexander Best wrote:
> > > On Sun Jan 30 11, Chagin Dmitry wrote:
> > > > On Sun, Jan 30, 2011 at 06:27:53PM +0000, arundel@freebsd.org wrote:
> > > > > Old Synopsis: [linux] [panic] kernel crash by linux.ko module with nooptions COMPAT_FREEBSD32
> > > > > New Synopsis: [linux] kernel crash by linux.ko module with nooptions COMPAT_FREEBSD32
> > > > > 
> > > > > State-Changed-From-To: open->analyzed
> > > > > State-Changed-By: arundel
> > > > > State-Changed-When: Sun Jan 30 18:13:13 UTC 2011
> > > > > State-Changed-Why: 
> > > > > We have two possibilities in order to fix this issue:
> > > > > 
> > > > > 1) Add something like the following somewhere in sys/amd/linux32:
> > > > > 
> > > > >    #ifndef COMPAT_FREEBSD32
> > > > >    #error "linux emulation requires COMPAT_FREEBSD32 \
> > > > > 	   option for non 32 bit architectures"
> > > > >    #endif
> > > > > 
> > > > > 2) Find a way to avoid the freebsd32_exec_copyin_args() call in
> > > > >    linux32_machdep.c. I believe this is the only place in the sys/amd/linux32
> > > > >    code that depends on sys/amd64/ia32 code.
> > > > > 
> > > > > NB: I've removed the panic tag from this PR. I was able to reproduce the issue,
> > > > >     however a panic didn't occur. The problem is that
> > > > >     freebsd32_exec_copyin_args() wasn't compiled into the kernel and loading the
> > > > >     linux kernel module thus fails.
> > > > > 
> > > > 
> > > > hi, close report, see r205014.
> > > 
> > > i verified the issue with a recent HEAD just a few minutes ago. the point is
> > > that users should be informed, when they build the linuxulator on 64 bit
> > > architectures without the COMPAT_FREEBSD32, because that will give them a
> > > broken linuxulator. either that or remove the freebsd32_exec_copyin_args() call
> > > from the linuxulator to make it independent from COMPAT_FREEBSD32 code.
> > > 
> > 
> > ah, i see.. module Makefile. so, we should sync kernel and module build
> > options.
> 
> i've tried adding linux compatibility to the kernel and even without the
> COMPAT_FREEBSD32 option, the linuxulator works.

sorry i did a mistake. in fact:

*with* COMPAT_LINUX32 in the kernel conf and *no* COMPAT_FREEBSD32, target
buildkernel fails:

/usr/subversion-src/sys/amd64/linux32/linux32_sysvec.c:38:2: error: #error "Unable to compile Linux-emulator due to missing COMPAT_FREEBSD32 option!"
#error "Unable to compile Linux-emulator due to missing COMPAT_FREEBSD32 option!"

...which is what should also happen when the linux kernel module gets compiled
and there's *no* COMPAT_FREEBSD32 in the kernel conf.

i think the following patch should fix this issue:

Index: sys/modules/linux/Makefile
===================================================================
--- sys/modules/linux/Makefile	(revision 218104)
+++ sys/modules/linux/Makefile	(working copy)
@@ -2,7 +2,7 @@
 
 .if ${MACHINE_CPUARCH} == "amd64"
 SFX= 32
-CFLAGS+=-DCOMPAT_FREEBSD32 -DCOMPAT_LINUX32
+CFLAGS+=-DCOMPAT_LINUX32
 .endif
 
 .PATH: ${.CURDIR}/../../compat/linux ${.CURDIR}/../../${MACHINE_CPUARCH}/linux${SFX}

cheers.
alex

> 
> so the problem is only with the module. i suspect the problem to be here:
> 
> FLAGS+=-DCOMPAT_FREEBSD32 -DCOMPAT_LINUX32
>         ^^
> the -DCOMPAT_FREEBSD32 doesn't do anything. since the module gets built after
> the kernel and the kernel doesn't come with ia32 emulation code, that option
> doesn't trigger anything.
> 
> we need to somehow determine if the user wants to build the linuxulator module
> before building the modules and force ia32 emulation accordingly. having the
> ia32 code available as module too, would make things a lot easier.
> 
> cheers.
> alex
> 
> > 
> > 
> > -- 
> > Have fun!
> > chd
> 
> 
> 
> -- 
> a13x

-- 
a13x



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110130220933.GA37241>