I've begun tinkering with syslinux v3 and have uncovered an anomoly with the DISPLAY file when called by pxelinux.0. If I have: DISPLAY boot.msg With an "^Xsplash.lss\n" in the file boot.msg (exactly: 18 73 70 6C 61 73 68 2E 6C 73 73 0A) file, it will fail to load the rle image. And produce some goofy results in the tftpd log: Jun 5 06:27:06 pxe in.tftpd[24649]: RRQ from 10.0.0.16 filename /pxe/boot.msg Jun 5 06:27:06 pxe in.tftpd[24650]: RRQ from 10.0.0.16 filename /pxe/splash.lss??f\213F A network trace also concurs: 23:27:06.804006 10.0.0.16.40707 > 10.0.0.2.tftp: 50 RRQ "/pxe/splash.lssM-fM-^?fM-^KF" This does not occur with any v2 pxelinux.0 I've tried. Is there a syntax change I've missed or a bug at work here? ../C
Yesterday Curtis Doty said:> I've begun tinkering with syslinux v3 and have uncovered an anomoly with > the DISPLAY file when called by pxelinux.0. > > If I have: > > DISPLAY boot.msg > > With an "^Xsplash.lss\n" in the file boot.msg (exactly: 18 73 70 6C 61 > 73 68 2E 6C 73 73 0A) file, it will fail to load the rle image. And > produce some goofy results in the tftpd log: > > Jun 5 06:27:06 pxe in.tftpd[24649]: RRQ from 10.0.0.16 filename > /pxe/boot.msg > Jun 5 06:27:06 pxe in.tftpd[24650]: RRQ from 10.0.0.16 filename > /pxe/splash.lss??f\213F > > A network trace also concurs: > > 23:27:06.804006 10.0.0.16.40707 > 10.0.0.2.tftp: 50 RRQ > "/pxe/splash.lssM-fM-^?fM-^KF"Answering my own question. This bug was introduced in 3.08. I've attache a rather brutal hack that when patched with -R will rollback the max command line changes. Problem vanishes. I don't speak more than just, "Donde esta el bano?" in assembler, so hopefully someone else can explain why or provide a real patch. ../C -------------- next part -------------- diff -urN syslinux-3.08-pre10/NEWS syslinux-3.08-pre11/NEWS --- syslinux-3.08-pre10/NEWS +++ syslinux-3.08-pre11/NEWS 2005-05-08 14:47:03.000000000 -0700 @@ -20,6 +20,9 @@ BIOS flash programs. * COM32 module to boot Multiboot systems, including Xen. See com32/modules/mboot.doc. + * Max command line changed to 1024 characters. Note that the + kernel proper still can only handle 255 characters without + patching, and COM16 binaries can only handle 125 characters. Changes in 3.07: * Fix chainloading (chain.c32). diff -urN syslinux-3.08-pre10/config.inc syslinux-3.08-pre11/config.inc --- syslinux-3.08-pre10/config.inc 2005-01-03 00:31:59.000000000 -0800 +++ syslinux-3.08-pre11/config.inc 2005-05-08 14:47:03.000000000 -0700 @@ -1,7 +1,7 @@ -;; $Id: config.inc,v 1.7 2005/01/03 08:31:59 hpa Exp $ +;; $Id: config.inc,v 1.8 2005/05/08 21:47:03 hpa Exp $ ;; ----------------------------------------------------------------------- ;; -;; Copyright 2002-2004 H. Peter Anvin - All Rights Reserved +;; Copyright 2002-2005 H. Peter Anvin - All Rights Reserved ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ %ifndef _CONFIG_INC %define _CONFIG_INC -max_cmd_len equ 255 ; Must be odd; 255 is the kernel limit +max_cmd_len equ 1023 ; Must be odd; 255 is the kernel limit HIGHMEM_MAX equ 037FFFFFFh ; DEFAULT highest address for an initrd DEFAULT_BAUD equ 9600 ; Default baud rate for serial port BAUD_DIVISOR equ 115200 ; Serial port parameter diff -urN syslinux-3.08-pre10/runkernel.inc syslinux-3.08-pre11/runkernel.inc --- syslinux-3.08-pre10/runkernel.inc 2005-01-06 14:34:06.000000000 -0800 +++ syslinux-3.08-pre11/runkernel.inc 2005-05-08 14:47:03.000000000 -0700 @@ -1,4 +1,4 @@ -;; $Id: runkernel.inc,v 1.19 2005/01/06 22:34:06 hpa Exp $ +;; $Id: runkernel.inc,v 1.20 2005/05/08 21:47:03 hpa Exp $ ;; ----------------------------------------------------------------------- ;; ;; Copyright 1994-2005 H. Peter Anvin - All Rights Reserved @@ -345,9 +345,12 @@ mov [fs:kern_cmd_offset],di ; Store pointer mov cx,[CmdLineLen] - add cx,byte 3 - shr cx,2 ; Convert to dwords - fs rep movsd + cmp cx,255 + jna .len_ok + mov cx,255 ; Protocol < 0x202 has 255 as hard limit +.len_ok: + fs rep movsb + fs stosb ; Final null, note AL == 0 here push fs pop es
Whoops. Reposting my own answer with different MUA because mailman didn't like silly innocuous fortune cookie header. ../C Curtis Doty wrote:>Yesterday Curtis Doty said: > > > >>I've begun tinkering with syslinux v3 and have uncovered an anomoly with >>the DISPLAY file when called by pxelinux.0. >> >>If I have: >> >>DISPLAY boot.msg >> >>With an "^Xsplash.lss\n" in the file boot.msg (exactly: 18 73 70 6C 61 >>73 68 2E 6C 73 73 0A) file, it will fail to load the rle image. And >>produce some goofy results in the tftpd log: >> >>Jun 5 06:27:06 pxe in.tftpd[24649]: RRQ from 10.0.0.16 filename >>/pxe/boot.msg >>Jun 5 06:27:06 pxe in.tftpd[24650]: RRQ from 10.0.0.16 filename >>/pxe/splash.lss??f\213F >> >>A network trace also concurs: >> >>23:27:06.804006 10.0.0.16.40707 > 10.0.0.2.tftp: 50 RRQ >>"/pxe/splash.lssM-fM-^?fM-^KF" >> >> > >Answering my own question. This bug was introduced in 3.08. I've attache a >rather brutal hack that when patched with -R will rollback the max command >line changes. Problem vanishes. > >I don't speak more than just, "Donde esta el bano?" in assembler, so >hopefully someone else can explain why or provide a real patch. > >../C > > >------------------------------------------------------------------------ > > >diff -urN syslinux-3.08-pre10/NEWS syslinux-3.08-pre11/NEWS --- syslinux-3.08-pre10/NEWS +++ syslinux-3.08-pre11/NEWS 2005-05-08 14:47:03.000000000 -0700 @@ -20,6 +20,9 @@ BIOS flash programs. * COM32 module to boot Multiboot systems, including Xen. See com32/modules/mboot.doc. + * Max command line changed to 1024 characters. Note that the + kernel proper still can only handle 255 characters without + patching, and COM16 binaries can only handle 125 characters. Changes in 3.07: * Fix chainloading (chain.c32). diff -urN syslinux-3.08-pre10/config.inc syslinux-3.08-pre11/config.inc --- syslinux-3.08-pre10/config.inc 2005-01-03 00:31:59.000000000 -0800 +++ syslinux-3.08-pre11/config.inc 2005-05-08 14:47:03.000000000 -0700 @@ -1,7 +1,7 @@ -;; $Id: config.inc,v 1.7 2005/01/03 08:31:59 hpa Exp $ +;; $Id: config.inc,v 1.8 2005/05/08 21:47:03 hpa Exp $ ;; ----------------------------------------------------------------------- ;; -;; Copyright 2002-2004 H. Peter Anvin - All Rights Reserved +;; Copyright 2002-2005 H. Peter Anvin - All Rights Reserved ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by @@ -20,7 +20,7 @@ %ifndef _CONFIG_INC %define _CONFIG_INC -max_cmd_len equ 255 ; Must be odd; 255 is the kernel limit +max_cmd_len equ 1023 ; Must be odd; 255 is the kernel limit HIGHMEM_MAX equ 037FFFFFFh ; DEFAULT highest address for an initrd DEFAULT_BAUD equ 9600 ; Default baud rate for serial port BAUD_DIVISOR equ 115200 ; Serial port parameter diff -urN syslinux-3.08-pre10/runkernel.inc syslinux-3.08-pre11/runkernel.inc --- syslinux-3.08-pre10/runkernel.inc 2005-01-06 14:34:06.000000000 -0800 +++ syslinux-3.08-pre11/runkernel.inc 2005-05-08 14:47:03.000000000 -0700 @@ -1,4 +1,4 @@ -;; $Id: runkernel.inc,v 1.19 2005/01/06 22:34:06 hpa Exp $ +;; $Id: runkernel.inc,v 1.20 2005/05/08 21:47:03 hpa Exp $ ;; ----------------------------------------------------------------------- ;; ;; Copyright 1994-2005 H. Peter Anvin - All Rights Reserved @@ -345,9 +345,12 @@ mov [fs:kern_cmd_offset],di ; Store pointer mov cx,[CmdLineLen] - add cx,byte 3 - shr cx,2 ; Convert to dwords - fs rep movsd + cmp cx,255 + jna .len_ok + mov cx,255 ; Protocol < 0x202 has 255 as hard limit +.len_ok: + fs rep movsb + fs stosb ; Final null, note AL == 0 here push fs pop es