From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41715) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YBogC-00076L-17 for qemu-devel@nongnu.org; Thu, 15 Jan 2015 12:58:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YBog6-00047t-U6 for qemu-devel@nongnu.org; Thu, 15 Jan 2015 12:57:59 -0500 Received: from mx1.redhat.com ([209.132.183.28]:35602) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YBog6-00047o-NZ for qemu-devel@nongnu.org; Thu, 15 Jan 2015 12:57:54 -0500 Message-ID: <54B7FF93.8070309@redhat.com> Date: Thu, 15 Jan 2015 12:57:39 -0500 From: Max Reitz MIME-Version: 1.0 References: <1421321204-17764-1-git-send-email-kwolf@redhat.com> <1421321204-17764-4-git-send-email-kwolf@redhat.com> In-Reply-To: <1421321204-17764-4-git-send-email-kwolf@redhat.com> Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/3] tests/multiboot: Add test for modules List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf , qemu-devel@nongnu.org Cc: pbonzini@redhat.com, sir@cmpwn.com, stefanha@redhat.com On 2015-01-15 at 06:26, Kevin Wolf wrote: > This test case is meant to detect corruptions of the Multiboot modules > as well as the multiboot modules list and the module command lines. > > Signed-off-by: Kevin Wolf > --- > tests/multiboot/Makefile | 5 ++++- > tests/multiboot/libc.c | 12 ++++++++++ > tests/multiboot/libc.h | 1 + > tests/multiboot/module.txt | 1 + > tests/multiboot/modules.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ > tests/multiboot/modules.out | 38 +++++++++++++++++++++++++++++++ > tests/multiboot/run_test.sh | 9 +++++++- > 7 files changed, 119 insertions(+), 2 deletions(-) > create mode 100644 tests/multiboot/module.txt > create mode 100644 tests/multiboot/modules.c > create mode 100644 tests/multiboot/modules.out > > diff --git a/tests/multiboot/Makefile b/tests/multiboot/Makefile > index 34cdd81..36f01dc 100644 > --- a/tests/multiboot/Makefile > +++ b/tests/multiboot/Makefile > @@ -6,11 +6,14 @@ LD=ld > LDFLAGS=-melf_i386 -T link.ld > LIBS=$(shell $(CC) $(CCFLAGS) -print-libgcc-file-name) > > -all: mmap.elf > +all: mmap.elf modules.elf > > mmap.elf: start.o mmap.o libc.o > $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) > > +modules.elf: start.o modules.o libc.o > + $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) > + > %.o: %.c > $(CC) $(CCFLAGS) -c -o $@ $^ > > diff --git a/tests/multiboot/libc.c b/tests/multiboot/libc.c > index 05abbd9..6df9bda 100644 > --- a/tests/multiboot/libc.c > +++ b/tests/multiboot/libc.c > @@ -22,6 +22,18 @@ > > #include "libc.h" > > +void* memcpy(void *dest, const void *src, int n) This should be "void *memcpy". There are three more occurences of this in this patch (see checkpatch output). > +{ > + char *d = dest; > + const char *s = src; > + > + while (n--) { > + *d++ = *s++; > + } > + > + return dest; > +} > + > static void print_char(char c) > { > outb(0xe9, c); > diff --git a/tests/multiboot/libc.h b/tests/multiboot/libc.h > index 80eec5b..04c9922 100644 > --- a/tests/multiboot/libc.h > +++ b/tests/multiboot/libc.h > @@ -57,5 +57,6 @@ static inline void outb(uint16_t port, uint8_t data) > /* Misc functions */ > > void printf(const char *fmt, ...); > +void* memcpy(void *dest, const void *src, int n); > > #endif > diff --git a/tests/multiboot/module.txt b/tests/multiboot/module.txt > new file mode 100644 > index 0000000..54c1d27 > --- /dev/null > +++ b/tests/multiboot/module.txt > @@ -0,0 +1 @@ > +This is a test file that is used as a multiboot module. > diff --git a/tests/multiboot/modules.c b/tests/multiboot/modules.c > new file mode 100644 > index 0000000..531601f > --- /dev/null > +++ b/tests/multiboot/modules.c > @@ -0,0 +1,55 @@ > +/* > + * Copyright (c) 2015 Kevin Wolf > + * > + * Permission is hereby granted, free of charge, to any person obtaining a copy > + * of this software and associated documentation files (the "Software"), to deal > + * in the Software without restriction, including without limitation the rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > + * THE SOFTWARE. > + */ > + > +#include "libc.h" > +#include "multiboot.h" > + > +int test_main(uint32_t magic, struct mb_info *mbi) > +{ > + struct mb_module *mod; > + unsigned int i; > + > + (void) magic; > + > + printf("Module list with %d entries at %x\n", > + mbi->mods_count, mbi->mods_addr); > + > + for (i = 0, mod = (struct mb_module*) mbi->mods_addr; > + i < mbi->mods_count; > + i++, mod++) > + { > + char buf[1024]; > + unsigned int size = mod->mod_end - mod->mod_start; > + > + printf("[%p] Module: %x - %x (%d bytes) '%s'\n", > + mod, mod->mod_start, mod->mod_end, size, mod->string); > + > + /* Print test file, but remove the newline at the end */ > + if (size < sizeof(buf)) { > + memcpy(buf, (void*) mod->mod_start, size); > + buf[size - 1] = '\0'; > + printf(" Content: '%s'\n", buf); > + } > + } > + > + return 0; > +} > diff --git a/tests/multiboot/modules.out b/tests/multiboot/modules.out > new file mode 100644 > index 0000000..1636708 > --- /dev/null > +++ b/tests/multiboot/modules.out > @@ -0,0 +1,38 @@ > + > + > + > +=== Running test case: modules.elf === > + > +Module list with 0 entries at 102000 > + > + > +=== Running test case: modules.elf -initrd module.txt === > + > +Module list with 1 entries at 102000 "1 entries"? Critical! ;-) Reviewed-by: Max Reitz I cannot give an R-b for the first patch simply because I don't have enough RAM to test it. Max