[PATCH]: Re: kern/122318 (CMake core dumping, chroot exiting)

Roman Divacky rdivacky at FreeBSD.org
Sun Jul 27 09:22:12 UTC 2008


On Sun, Jul 27, 2008 at 11:03:10AM +0200, Roman Divacky wrote:
> On Sat, Jul 26, 2008 at 08:31:10AM +0200, Alexander Leidinger wrote:
> > Quoting "Sean C. Farley" <scf at FreeBSD.org> (Fri, 25 Jul 2008 15:36:52
> > -0500 (CDT)):
> > 
> > > On Fri, 25 Jul 2008, Chagin Dmitry wrote:
> > 
> > > > uname must work on all supported linuxulators
> > > 
> > > I agree, and it does work until I start playing with the Linux version.
> > 
> > Don't play with the linux version while linux programs are running.
> > Changing the version from 2.4.x to 2.6.x and vice versa while a program
> > is running is not supported at all and known to cause havoc. Roman, do
> > we have the possibility to make an easy check in the sysctl handler if
> > a linux program is still running and return an error from the handler?
> > Did I forgot something which makes it impossible to switch when a
> > program was run under 2.6 and stopped?
> 
> I'll submit a patch that makes it impossible to switch the veresion when
> programs are running... it's not hard (elf{32}_brand_inuse() for every
> elf brand the linuxulator registered)

here it is:

Index: linux_mib.c
===================================================================
--- linux_mib.c	(revision 180831)
+++ linux_mib.c	(working copy)
@@ -251,8 +251,17 @@
 {
 	struct prison *pr;
 	struct linux_prison *lpr;
+	Elf32_Brandinfo **brandinfo;
 	int use26;
 
+	for (brandinfo = &linux_brandlist[0]; *brandinfo != NULL;
+		++brandinfo)
+		if (elf32_brand_inuse(*brandinfo)) {
+		   printf("Cannot change osrelease while Linux binaries are running.\r\n");
+		   return (EBUSY);
+		}
+
+
 	use26 = (strlen(osrelease) >= 3 && osrelease[2] == '6');
 
 	pr = linux_get_prison(td);

it's a copy'n'paste from i386/linux/linux_sysvec.c so I didnt bother to test it ;) but I
guess it works :)

roman


More information about the freebsd-emulation mailing list