diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c index b0d3082409..9dae1bc9ee 100644 --- a/xen/arch/x86/hvm/dm.c +++ b/xen/arch/x86/hvm/dm.c @@ -493,6 +493,12 @@ int dm_op(const struct dmop_args *op_args) struct xen_dm_op_modified_memory *data = &op.u.modified_memory; + if ( op_args->nr_bufs != 2 ) + { + rc = -EINVAL; + break; + } + rc = modified_memory(d, op_args, data); const_op = !rc; break; @@ -654,6 +660,9 @@ int compat_dm_op( unsigned int i; int rc; + if ( !nr_bufs ) + return -ENODATA; + if ( nr_bufs > ARRAY_SIZE(args.buf) ) return -E2BIG; diff --git a/xen/common/dm.c b/xen/common/dm.c index 201b652deb..8689728ab7 100644 --- a/xen/common/dm.c +++ b/xen/common/dm.c @@ -26,6 +26,9 @@ long do_dm_op( struct dmop_args args; int rc; + if ( !nr_bufs ) + return -ENODATA; + if ( nr_bufs > ARRAY_SIZE(args.buf) ) return -E2BIG;