提交 334c0241 编写于 作者: A aurel32

Add image format option for USB mass-storage devices

(fix CVE-2008-1945)
Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5059 c046a42c-6fe2-441c-8c8c-71466251a162
上级 7ed9eba3
...@@ -517,13 +517,42 @@ USBDevice *usb_msd_init(const char *filename) ...@@ -517,13 +517,42 @@ USBDevice *usb_msd_init(const char *filename)
{ {
MSDState *s; MSDState *s;
BlockDriverState *bdrv; BlockDriverState *bdrv;
BlockDriver *drv = NULL;
const char *p1;
char fmt[32];
p1 = strchr(filename, ':');
if (p1++) {
const char *p2;
if (strstart(filename, "format=", &p2)) {
int len = MIN(p1 - p2, sizeof(fmt));
pstrcpy(fmt, len, p2);
drv = bdrv_find_format(fmt);
if (!drv) {
printf("invalid format %s\n", fmt);
return NULL;
}
} else if (*filename != ':') {
printf("unrecognized USB mass-storage option %s\n", filename);
return NULL;
}
filename = p1;
}
if (!*filename) {
printf("block device specification needed\n");
return NULL;
}
s = qemu_mallocz(sizeof(MSDState)); s = qemu_mallocz(sizeof(MSDState));
if (!s) if (!s)
return NULL; return NULL;
bdrv = bdrv_new("usb"); bdrv = bdrv_new("usb");
if (bdrv_open(bdrv, filename, 0) < 0) if (bdrv_open2(bdrv, filename, 0, drv) < 0)
goto fail; goto fail;
if (qemu_key_check(bdrv, filename)) if (qemu_key_check(bdrv, filename))
goto fail; goto fail;
......
...@@ -550,8 +550,10 @@ Pointer device that uses absolute coordinates (like a touchscreen). This ...@@ -550,8 +550,10 @@ Pointer device that uses absolute coordinates (like a touchscreen). This
means qemu is able to report the mouse position without having to grab the means qemu is able to report the mouse position without having to grab the
mouse. Also overrides the PS/2 mouse emulation when activated. mouse. Also overrides the PS/2 mouse emulation when activated.
@item disk:file @item disk:[format=@var{format}]:file
Mass storage device based on file Mass storage device based on file. The optional @var{format} argument
will be used rather than detecting the format. Can be used to specifiy
format=raw to avoid interpreting an untrusted format header.
@item host:bus.addr @item host:bus.addr
Pass through the host device identified by bus.addr (Linux only). Pass through the host device identified by bus.addr (Linux only).
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册