Hi All.
My name is Naoki Takayama, work for FUJITSU.
I found following disk configuration problem.
When I specify 'file:yy.img,hde,w' in domain config file as below,
the vnc connection demands to input the password.
disk = [ 'file:xx.img,ioemu:hda,w','file:yy.img,hde,w' ]
If I change the 'hde' to 'hdf', this problem does not occur.
This problem is caused by xenstore_parse_domain_config function
in tools/ioemu/xenstore.c
in line 102: hd_index variable is assigned value 4.
in line 123: bs_table array is accsessed by the index(4).
(the vncpasswd variable is overwritten)
Here, bs_table is defined as "BlockDriverState *bs_table[MAX_DISKS]" in vl.c
and MAX_DISKS is defined as value 4 in vl.h
Does anyone have a suggetion how to fix this problem?
tools/ioemu/xenstore.c
55 void xenstore_parse_domain_config(int domid)
56 {
57 char **e = NULL;
58 char *buf = NULL, *path;
59 char *bpath = NULL, *dev = NULL, *params = NULL, *type = NULL;
60 int i;
61 unsigned int len, num, hd_index;
[snip]
102 hd_index = dev[2] - 'a'; <== assign value 4.
103 if (hd_index > MAX_DISKS)
104 continue;
105 /* read the type of the device */
106 if (pasprintf(&buf, "%s/device/vbd/%s/device-type", path, e[i]) ==
-1)
107 continue;
108 free(type);
109 type = xs_read(xsh, XBT_NULL, buf, &len);
110 /* read params to get the patch of the image -- read it last
111 * so that we have its path in buf when setting up the
112 * watch */
113 if (pasprintf(&buf, "%s/params", bpath) == -1)
114 continue;
115 free(params);
116 params = xs_read(xsh, XBT_NULL, buf, &len);
117 if (params == NULL)
118 continue;
119 if (params[0]) {
120 hd_filename[hd_index] = params; /* strdup() */
121 params = NULL; /* don't free params on re-use */
122 }
123 bs_table[hd_index] = bdrv_new(dev); <== overwrite occur
[snip]
--
Naoki Takayama
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|