2005-10-09 19:17:47

by Blaisorblade

[permalink] [raw]
Subject: Uml left showstopper bugs for 2.6.14

Here's a short and updated list of showstoppers for 2.6.14 release, from the
UML point of view.

It's all things for which we (me and Jeff) have fixes, we are just in the
progress of cleaning them and/or in the queues.

I initially read 2.6.14 ETA's was around October 7, when is it now?

However, here we go with the showstoppers (mostly regression):

1) problems with UBD (i.e. _the_ uml block driver): this is pretty dangerous
and untrivial to fix, even if the code exists - so I and Jeff agreed to revert
the change altogether. Jeff will send the thing.

2) Someone broke endianness of COW driver macros in a header cleanup. I have
fixes.

3) SKAS0 is broken on amd64 hosts, when frame pointers are disabled. Jeff has
the fix, waiting end of testing.

4) SKAS0 is broken with GCC 3.2.3, and potentially other GCC releases - look
at arch/um/include/sysdep-i386/stub.h: stub_syscall*() to see how. I have two
fixes, choosing the safer one (it's all just simply reusing code from
<asm/unistd.h>).

5) Compile-time regression with SKAS mode disabled, will fix later (I'm going
to have dinner now).
--
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade






___________________________________
Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB
http://mail.yahoo.it


2005-10-09 19:42:45

by Blaisorblade

[permalink] [raw]
Subject: Re: [uml-devel] Uml left showstopper bugs for 2.6.14

Kai - go to the end, there are patches for your SKAS0 problem.

On Sunday 09 October 2005 21:18, Blaisorblade wrote:
> Here's a short and updated list of showstoppers for 2.6.14 release, from
> the UML point of view.

> 2) Someone broke endianness of COW driver macros in a header cleanup. I
> have fixes.
Just sent them.
> 3) SKAS0 is broken on amd64 hosts, when frame pointers are disabled. Jeff
> has the fix, waiting end of testing.

> 4) SKAS0 is broken with GCC 3.2.3, and potentially other GCC releases -
> look at arch/um/include/sysdep-i386/stub.h: stub_syscall*() to see how. I
> have two fixes, choosing the safer one (it's all just simply reusing code
> from <asm/unistd.h>).
Jeff, I've attached patches for this. Also found another problematic piece of
code, in stub-segv (same bad idea).

The patch for that changes a bit more things that strictly needed - complain
if that's a problem for merging in 2.6.14.

Kai Tan, the order of the patches is:

uml-fix-misassembling-skas0-stub
uml-fix-misassembling-skas0-stub-segv

Note that the second is a bit less tested, so if both together cause problems,
try with only the first one.

And remember to add "skas0" to the cmd line, to force UML to run in SKAS0
mode.
--
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade


Attachments:
(No filename) (1.39 kB)
uml-fix-misassembling-skas0-stub (6.28 kB)
uml-fix-misassembling-skas0-stub-segv (3.02 kB)
Download all attachments

2005-10-09 19:42:45

by Blaisorblade

[permalink] [raw]
Subject: [PATCH 1/6] Uml: hide commands when not being verbose

From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

Add a missing $(Q) to a "ln" invocation.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

arch/um/Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/um/Makefile b/arch/um/Makefile
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -152,7 +152,7 @@ archclean:
$(SYMLINK_HEADERS):
@echo ' SYMLINK $@'
ifneq ($(KBUILD_SRC),)
- ln -fsn $(srctree)/include/asm-um/$(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $@
+ $(Q)ln -fsn $(srctree)/include/asm-um/$(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $@
else
$(Q)cd $(TOPDIR)/$(dir $@) ; \
ln -sf $(basename $(notdir $@))-$(SUBARCH)$(suffix $@) $(notdir $@)

2005-10-09 19:45:05

by Blaisorblade

[permalink] [raw]
Subject: [PATCH 3/6] uml: allow building .s/.i/.lst files from userspace files

From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

For files which need to include glibc headers (i.e. userspace files), we
specified the correct flags only for .o, not for .s/.lst/.i. Fix this.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

arch/um/scripts/Makefile.rules | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/um/scripts/Makefile.rules b/arch/um/scripts/Makefile.rules
--- a/arch/um/scripts/Makefile.rules
+++ b/arch/um/scripts/Makefile.rules
@@ -7,8 +7,8 @@ USER_SINGLE_OBJS := \
USER_OBJS += $(filter %_user.o,$(obj-y) $(obj-m) $(USER_SINGLE_OBJS))
USER_OBJS := $(foreach file,$(USER_OBJS),$(obj)/$(file))

-$(USER_OBJS) : c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) \
- $(CFLAGS_$(notdir $@))
+$(USER_OBJS) $(USER_OBJS:.o=.i) $(USER_OBJS:.o=.s) $(USER_OBJS:.o=.lst): \
+ c_flags = -Wp,-MD,$(depfile) $(USER_CFLAGS) $(CFLAGS_$(notdir $@))
$(USER_OBJS): cmd_checksrc =
$(USER_OBJS): quiet_cmd_checksrc =
$(USER_OBJS): cmd_force_checksrc =

2005-10-09 19:44:08

by Blaisorblade

[permalink] [raw]
Subject: [PATCH 2/6] uml: add mode=skas0 as a synonym of skas0

From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

Too many people were confused by skas0 and tried using "mode=skas0". And after
all, they are right - accept this.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

arch/um/os-Linux/start_up.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c
--- a/arch/um/os-Linux/start_up.c
+++ b/arch/um/os-Linux/start_up.c
@@ -143,11 +143,22 @@ static int __init skas0_cmd_param(char *
return 0;
}

+/* The two __uml_setup would conflict, without this stupid alias. */
+
+static int __init mode_skas0_cmd_param(char *str, int* add)
+ __attribute__((alias("skas0_cmd_param")));
+
__uml_setup("skas0", skas0_cmd_param,
"skas0\n"
" Disables SKAS3 usage, so that SKAS0 is used, unless \n"
" you specify mode=tt.\n\n");

+__uml_setup("mode=skas0", mode_skas0_cmd_param,
+ "mode=skas0\n"
+ " Disables SKAS3 usage, so that SKAS0 is used, unless you \n"
+ " specify mode=tt. Note that this was recently added - on \n"
+ " older kernels you must use simply \"skas0\".\n\n");
+
static int force_sysemu_disabled = 0;

static int __init nosysemu_cmd_param(char *str, int* add)

2005-10-09 19:45:05

by Blaisorblade

[permalink] [raw]
Subject: [PATCH 5/6] uml: cleanup byte order macros for COW driver

From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

After restoring the existing code, make it work also when included in
kernelspace code (which isn't currently the case, but at least this will prevent
people from "fixing" it as just happened).
Whitespace is fixed in next patch - it cluttered the diff too much.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

arch/um/drivers/cow.h | 27 ++++++++++++++++++++++++++-
arch/um/drivers/cow_user.c | 1 -
2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/arch/um/drivers/cow.h b/arch/um/drivers/cow.h
--- a/arch/um/drivers/cow.h
+++ b/arch/um/drivers/cow.h
@@ -3,6 +3,26 @@

#include <asm/types.h>

+#if defined(__KERNEL__)
+
+# include <asm/byteorder.h>
+
+# if defined(__BIG_ENDIAN)
+# define ntohll(x) (x)
+# define htonll(x) (x)
+# elif defined(__LITTLE_ENDIAN)
+# define ntohll(x) be64_to_cpu(x)
+# define htonll(x) cpu_to_be64(x)
+# else
+# error "Could not determine byte order"
+# endif
+
+#else
+/* For the definition of ntohl, htonl and __BYTE_ORDER */
+#include <endian.h>
+#include <netinet/in.h>
+#if defined(__BYTE_ORDER)
+
#if __BYTE_ORDER == __BIG_ENDIAN
# define ntohll(x) (x)
# define htonll(x) (x)
@@ -10,8 +30,13 @@
# define ntohll(x) bswap_64(x)
# define htonll(x) bswap_64(x)
#else
-#error "__BYTE_ORDER not defined"
+# error "Could not determine byte order: __BYTE_ORDER uncorrectly defined"
+#endif
+
+#else /* ! defined(__BYTE_ORDER) */
+# error "Could not determine byte order: __BYTE_ORDER not defined"
#endif
+#endif /* ! defined(__KERNEL__) */

extern int init_cow_file(int fd, char *cow_file, char *backing_file,
int sectorsize, int alignment, int *bitmap_offset_out,
diff --git a/arch/um/drivers/cow_user.c b/arch/um/drivers/cow_user.c
--- a/arch/um/drivers/cow_user.c
+++ b/arch/um/drivers/cow_user.c
@@ -9,7 +9,6 @@
#include <sys/time.h>
#include <sys/param.h>
#include <sys/user.h>
-#include <netinet/in.h>

#include "os.h"


2005-10-09 19:45:59

by Blaisorblade

[permalink] [raw]
Subject: [PATCH 4/6] uml: restore include breakage, breaking binary format of COW driver

From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

Commit 44456d37b59d8e541936ed26d8b6e08d27e88ac1, between 2.6.13-rc3 and -rc4,
was a "nice cleanup" which broke something. Revert the offending part.

It broke because:
a) because this part doesn't fall under the description
b) the author didn't know what he was doing here
c) the author didn't try to compile the existing code and see that it worked
perfectly.
d) the author didn't ask us what was happening
e) you didn't either, and somebody there should have learned that UML is a bit
different.

In fact, UML is special in linking to host libc and using its includes.

In particular, since host includes always define both __BIG_ENDIAN and
__LITTLE_ENDIAN, ntohll() macros started thinking to be in a big-endian world;
and on-disk compatibility was broken.

Many thanks go to Nix for reporting the problem and correctly diagnosing an
endianness problem.

Btw, this patch restores the previous code, which worked; but the definitions
would be uncorrect if used in kernelspace files.

Next patch addresses that.

Cc: Nix <[email protected]>, Olaf Hering <[email protected]>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

arch/um/drivers/cow.h | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/um/drivers/cow.h b/arch/um/drivers/cow.h
--- a/arch/um/drivers/cow.h
+++ b/arch/um/drivers/cow.h
@@ -3,10 +3,10 @@

#include <asm/types.h>

-#if defined(__BIG_ENDIAN)
+#if __BYTE_ORDER == __BIG_ENDIAN
# define ntohll(x) (x)
# define htonll(x) (x)
-#elif defined(__LITTLE_ENDIAN)
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
# define ntohll(x) bswap_64(x)
# define htonll(x) bswap_64(x)
#else

2005-10-09 19:45:59

by Blaisorblade

[permalink] [raw]
Subject: [PATCH 6/6] uml: cleanup whitespace for COW driver

From: Paolo 'Blaisorblade' Giarrusso <[email protected]>

Fix whitespace - I split this off the previous patch for easier review.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

arch/um/drivers/cow.h | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/um/drivers/cow.h b/arch/um/drivers/cow.h
--- a/arch/um/drivers/cow.h
+++ b/arch/um/drivers/cow.h
@@ -23,15 +23,15 @@
#include <netinet/in.h>
#if defined(__BYTE_ORDER)

-#if __BYTE_ORDER == __BIG_ENDIAN
-# define ntohll(x) (x)
-# define htonll(x) (x)
-#elif __BYTE_ORDER == __LITTLE_ENDIAN
-# define ntohll(x) bswap_64(x)
-# define htonll(x) bswap_64(x)
-#else
-# error "Could not determine byte order: __BYTE_ORDER uncorrectly defined"
-#endif
+# if __BYTE_ORDER == __BIG_ENDIAN
+# define ntohll(x) (x)
+# define htonll(x) (x)
+# elif __BYTE_ORDER == __LITTLE_ENDIAN
+# define ntohll(x) bswap_64(x)
+# define htonll(x) bswap_64(x)
+# else
+# error "Could not determine byte order: __BYTE_ORDER uncorrectly defined"
+# endif

#else /* ! defined(__BYTE_ORDER) */
# error "Could not determine byte order: __BYTE_ORDER not defined"

2005-10-09 23:10:38

by Jeff Dike

[permalink] [raw]
Subject: Re: Uml left showstopper bugs for 2.6.14

On Sun, Oct 09, 2005 at 09:18:20PM +0200, Blaisorblade wrote:
> 1) problems with UBD (i.e. _the_ uml block driver): this is pretty dangerous
> and untrivial to fix, even if the code exists - so I and Jeff agreed to revert
> the change altogether. Jeff will send the thing.

My current plan is to revert the ubd-aio patch. I need to look at this and
run some testing on it.

> 3) SKAS0 is broken on amd64 hosts, when frame pointers are disabled. Jeff has
> the fix, waiting end of testing.

This has been sent to Linus.

> 5) Compile-time regression with SKAS mode disabled, will fix later (I'm going
> to have dinner now).

I looked at the patch and requested the sender forward it to Linus, with my
approval. If he doesn't in the next day or so, then I'll send it in myself.

Jeff

2005-11-02 21:44:21

by Kai Tan

[permalink] [raw]
Subject: Re: [uml-devel] Uml left showstopper bugs for 2.6.14

I tried the first patch, got the following error:

Kernel panic - not syncing: copy_context_skas0 : failed to wait for
SIGUSR1/SIGTRAP, pid = 7182, n = 7182, errno = 0, status = 0xb7f

I got the same error even after applying the second patch.

My run command is the following:

linux stderr=1 ubd0=../../root_fs.rh-7.2-full.pristine.20020312

>From: Blaisorblade <[email protected]>
>To: [email protected]
>CC: Jeff Dike <[email protected]>, LKML <[email protected]>,
>"Kai Tan" <[email protected]>
>Subject: Re: [uml-devel] Uml left showstopper bugs for 2.6.14
>Date: Sun, 9 Oct 2005 21:42:32 +0200
>
>Kai - go to the end, there are patches for your SKAS0 problem.
>
>On Sunday 09 October 2005 21:18, Blaisorblade wrote:
> > Here's a short and updated list of showstoppers for 2.6.14 release, from
> > the UML point of view.
>
> > 2) Someone broke endianness of COW driver macros in a header cleanup. I
> > have fixes.
>Just sent them.
> > 3) SKAS0 is broken on amd64 hosts, when frame pointers are disabled.
>Jeff
> > has the fix, waiting end of testing.
>
> > 4) SKAS0 is broken with GCC 3.2.3, and potentially other GCC releases -
> > look at arch/um/include/sysdep-i386/stub.h: stub_syscall*() to see how.
>I
> > have two fixes, choosing the safer one (it's all just simply reusing
>code
> > from <asm/unistd.h>).
>Jeff, I've attached patches for this. Also found another problematic piece
>of
>code, in stub-segv (same bad idea).
>
>The patch for that changes a bit more things that strictly needed -
>complain
>if that's a problem for merging in 2.6.14.
>
>Kai Tan, the order of the patches is:
>
>uml-fix-misassembling-skas0-stub
>uml-fix-misassembling-skas0-stub-segv
>
>Note that the second is a bit less tested, so if both together cause
>problems,
>try with only the first one.
>
>And remember to add "skas0" to the cmd line, to force UML to run in SKAS0
>mode.
>--
>Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
>Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ
>215621894)
>http://www.user-mode-linux.org/~blaisorblade


><< uml-fix-misassembling-skas0-stub >>


><< uml-fix-misassembling-skas0-stub-segv >>


2005-11-02 22:42:45

by Blaisorblade

[permalink] [raw]
Subject: Re: [uml-devel] Uml left showstopper bugs for 2.6.14

On Wednesday 02 November 2005 22:44, Kai Tan wrote:
> I tried the first patch, got the following error:
>
> Kernel panic - not syncing: copy_context_skas0 : failed to wait for
> SIGUSR1/SIGTRAP, pid = 7182, n = 7182, errno = 0, status = 0xb7f
Ok, segmentation fault, again:
$ ./testprogs/waitstatus $[0xb7f]
WSTOPSIG(status) is 11
The signal is: Segmentation fault

> I got the same error even after applying the second patch.
Oh, sorry.
Can you just try doing a "make clean" and forcing a full recompilation? In any
case, I will try investigating further... I'll probably request you to give
me the complete binary (without debug info and compressed) along with
your .config. Please save them for now, I must check further before...

For now, IIRC you can keep running with mode=tt, right?

> My run command is the following:
>
> linux stderr=1 ubd0=../../root_fs.rh-7.2-full.pristine.20020312

--
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade


____________________________________
Con Yahoo! Mail proteggi la tua casella di posta da virus e posta indesiderata
http://mail.yahoo.com