Message ID | 20170724150805.19563-1-dgilbert@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 24.07.2017 17:08, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > memsave and pmemsave only take 32bit size arguments in HMP at the > moment; let them take 64bit values. > > Reported-by: Pierre Kim <admin@manateeshome.com> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > hmp-commands.hx | 4 ++-- > hmp.c | 13 +++++++++++-- > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/hmp-commands.hx b/hmp-commands.hx > index 1941e19932..ddf77ae7ac 100644 > --- a/hmp-commands.hx > +++ b/hmp-commands.hx > @@ -829,7 +829,7 @@ ETEXI > > { > .name = "memsave", > - .args_type = "val:l,size:i,filename:s", > + .args_type = "val:l,size:l,filename:s", > .params = "addr size file", > .help = "save to disk virtual memory dump starting at 'addr' of size 'size'", > .cmd = hmp_memsave, > @@ -843,7 +843,7 @@ ETEXI > > { > .name = "pmemsave", > - .args_type = "val:l,size:i,filename:s", > + .args_type = "val:l,size:l,filename:s", > .params = "addr size file", > .help = "save to disk physical memory dump starting at 'addr' of size 'size'", > .cmd = hmp_pmemsave, > diff --git a/hmp.c b/hmp.c > index bf1de747d5..5118896779 100644 > --- a/hmp.c > +++ b/hmp.c > @@ -1066,7 +1066,7 @@ void hmp_cpu(Monitor *mon, const QDict *qdict) > > void hmp_memsave(Monitor *mon, const QDict *qdict) > { > - uint32_t size = qdict_get_int(qdict, "size"); > + int64_t size = qdict_get_int(qdict, "size"); > const char *filename = qdict_get_str(qdict, "filename"); > uint64_t addr = qdict_get_int(qdict, "val"); > Error *err = NULL; > @@ -1076,6 +1076,10 @@ void hmp_memsave(Monitor *mon, const QDict *qdict) > monitor_printf(mon, "No CPU available\n"); > return; > } > + if (size <= 0) { > + monitor_printf(mon, "Invalid size\n"); > + return; > + } > > qmp_memsave(addr, size, filename, true, cpu_index, &err); > hmp_handle_error(mon, &err); > @@ -1083,11 +1087,16 @@ void hmp_memsave(Monitor *mon, const QDict *qdict) > > void hmp_pmemsave(Monitor *mon, const QDict *qdict) > { > - uint32_t size = qdict_get_int(qdict, "size"); > + int64_t size = qdict_get_int(qdict, "size"); > const char *filename = qdict_get_str(qdict, "filename"); > uint64_t addr = qdict_get_int(qdict, "val"); > Error *err = NULL; > > + if (size <= 0) { > + monitor_printf(mon, "Invalid size\n"); > + return; > + } > + > qmp_pmemsave(addr, size, filename, &err); > hmp_handle_error(mon, &err); > } > Reviewed-by: Thomas Huth <thuth@redhat.com>
"Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> writes: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > memsave and pmemsave only take 32bit size arguments in HMP at the > moment; let them take 64bit values. > > Reported-by: Pierre Kim <admin@manateeshome.com> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > hmp-commands.hx | 4 ++-- > hmp.c | 13 +++++++++++-- > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/hmp-commands.hx b/hmp-commands.hx > index 1941e19932..ddf77ae7ac 100644 > --- a/hmp-commands.hx > +++ b/hmp-commands.hx > @@ -829,7 +829,7 @@ ETEXI > > { > .name = "memsave", > - .args_type = "val:l,size:i,filename:s", > + .args_type = "val:l,size:l,filename:s", > .params = "addr size file", > .help = "save to disk virtual memory dump starting at 'addr' of size 'size'", > .cmd = hmp_memsave, The size is wider, but still signed. Reproduces QAPI/QMP's mistake. We should fix it there, and make this "size:o" here, so suffixes work as they should. I'll cook up a QAPI/QMP patch. [...]
diff --git a/hmp-commands.hx b/hmp-commands.hx index 1941e19932..ddf77ae7ac 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -829,7 +829,7 @@ ETEXI { .name = "memsave", - .args_type = "val:l,size:i,filename:s", + .args_type = "val:l,size:l,filename:s", .params = "addr size file", .help = "save to disk virtual memory dump starting at 'addr' of size 'size'", .cmd = hmp_memsave, @@ -843,7 +843,7 @@ ETEXI { .name = "pmemsave", - .args_type = "val:l,size:i,filename:s", + .args_type = "val:l,size:l,filename:s", .params = "addr size file", .help = "save to disk physical memory dump starting at 'addr' of size 'size'", .cmd = hmp_pmemsave, diff --git a/hmp.c b/hmp.c index bf1de747d5..5118896779 100644 --- a/hmp.c +++ b/hmp.c @@ -1066,7 +1066,7 @@ void hmp_cpu(Monitor *mon, const QDict *qdict) void hmp_memsave(Monitor *mon, const QDict *qdict) { - uint32_t size = qdict_get_int(qdict, "size"); + int64_t size = qdict_get_int(qdict, "size"); const char *filename = qdict_get_str(qdict, "filename"); uint64_t addr = qdict_get_int(qdict, "val"); Error *err = NULL; @@ -1076,6 +1076,10 @@ void hmp_memsave(Monitor *mon, const QDict *qdict) monitor_printf(mon, "No CPU available\n"); return; } + if (size <= 0) { + monitor_printf(mon, "Invalid size\n"); + return; + } qmp_memsave(addr, size, filename, true, cpu_index, &err); hmp_handle_error(mon, &err); @@ -1083,11 +1087,16 @@ void hmp_memsave(Monitor *mon, const QDict *qdict) void hmp_pmemsave(Monitor *mon, const QDict *qdict) { - uint32_t size = qdict_get_int(qdict, "size"); + int64_t size = qdict_get_int(qdict, "size"); const char *filename = qdict_get_str(qdict, "filename"); uint64_t addr = qdict_get_int(qdict, "val"); Error *err = NULL; + if (size <= 0) { + monitor_printf(mon, "Invalid size\n"); + return; + } + qmp_pmemsave(addr, size, filename, &err); hmp_handle_error(mon, &err); }