Jerone Young wrote: > # HG changeset patch > # User Jerone Young <[EMAIL PROTECTED]> > # Date 1205953012 18000 > # Branch merge > # Node ID 8e9da5ddf159eb6cf5a292ccbf5f735103b493ef > # Parent 03925441312877b8350e4af68e475d5d746304d4 > Add dynamic device tree manipulation & change uboot loader for PPC bamboo > board model > > This patch adds code to dynamically manipulate the device tree when loaded > into memory. This allows us to finally have the ability to manipulate the > kernel command line & initrd from the qemu command line. This will also let > us setup different settings for the board. > > This patch also now uses new uboot loader load_uimage() to load kernel image. > > Signed-off-by: Jerone Young <[EMAIL PROTECTED]> > > diff --git a/qemu/Makefile.target b/qemu/Makefile.target > --- a/qemu/Makefile.target > +++ b/qemu/Makefile.target > @@ -617,7 +617,7 @@ OBJS+= unin_pci.o ppc_chrp.o > OBJS+= unin_pci.o ppc_chrp.o > # PowerPC 4xx boards > OBJS+= pflash_cfi02.o ppc4xx_devs.o ppc405_uc.o ppc405_boards.o > -OBJS+= ppc440.o ppc440_bamboo.o > +OBJS+= ppc440.o ppc440_bamboo.o device_tree.o > endif > ifeq ($(TARGET_BASE_ARCH), mips) > OBJS+= mips_r4k.o mips_malta.o mips_pica61.o mips_mipssim.o > diff --git a/qemu/hw/device_tree.c b/qemu/hw/device_tree.c > new file mode 100644 > --- /dev/null > +++ b/qemu/hw/device_tree.c > @@ -0,0 +1,181 @@ > +/* > + * Functions to help device tree manipulation using libfdt. > + * It also provides functions to read entries from device tree proc > + * interface. > + * > + * Copyright 2008 IBM Corporation. > + * Authors: Jerone Young <[EMAIL PROTECTED]> > + * > + * This work is licensed under the GNU GPL license version 2 or later. > + * > + */ > + > +#include <stdio.h> > +#include <sys/types.h> > +#include <sys/stat.h> > +#include <fcntl.h> > +#include <unistd.h> > +#include <stdlib.h> > + > +#include "config.h" > +#include "ppc440.h" > + > +#ifdef CONFIG_LIBFDT > +#include "libfdt.h" > +#endif > + > +#define DT_PROC_INTERFACE_PATH "/proc/device-tree" > + > +/* FUNCTIONS FOR READING FROM DEVICE TREE OF HOST IN /PROC */ > + > +/* This function reads device-tree property files that are of > + * a single cell size > + */ > +uint32_t read_proc_dt_prop_cell(char *path_in_device_tree) > +{ > + char *buf = NULL; > + int i; > + uint32_t num; > + FILE *stream; > + > + i = snprintf(buf, 0, "%s/%s", DT_PROC_INTERFACE_PATH, > + path_in_device_tree); > + > + buf = (char *)malloc(i); > + if (buf == NULL) { > + printf("%s: Unable to malloc string buffer buf\n", > + __func__); > + exit(1); > + } > + > + i = snprintf(buf, i+1, "%s/%s", DT_PROC_INTERFACE_PATH, > + path_in_device_tree); >
asprintf() is the right thing to do here. You allocate 'i' bytes but then snprintf() to 'i + 1' bytes, that's a buffer overflow. > +fail: > + if (dt_file) > + qemu_free(dt_file); > + return NULL; > +} > + > +void dump_device_tree_to_file(void *fdt, char *filename) > +{ > + int fd; > + fd = open(filename, O_RDWR|O_CREAT); > Need to pass a permission mask when using O_CREAT. Regards, Anthony LIguori ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel