x86/32on64: properly honor add-to-physmap-batch's size

Commit 407a3c00ff ("compat/memory: fix build with old gcc") "fixed" a
build issue by switching to the use of uninitialized data. Due to
- the bounding of the uninitialized data item
- the accessed area being outside of Xen space
- arguments being properly verified by the native hypercall function
this is not a security issue.

Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: 144aec4140
master date: 2017-04-26 09:48:45 +0200
This commit is contained in:
Jan Beulich committed 2017-06-09 13:54:27 +02:00
1 parent 7496924db2
commit d48df03309
1 file changed
+5 -3
+5 -3
View File
@@ -249,12 +249,14 @@ int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) compat)
unsigned int limit = (COMPAT_ARG_XLAT_SIZE - sizeof(*nat.atpb))
/ (sizeof(nat.atpb->idxs.p) + sizeof(nat.atpb->gpfns.p));
/* Use an intermediate variable to suppress warnings on old gcc: */
unsigned int size = cmp.atpb.size;
unsigned int size;
xen_ulong_t *idxs = (void *)(nat.atpb + 1);
xen_pfn_t *gpfns = (void *)(idxs + limit);
if ( copy_from_guest(&cmp.atpb, compat, 1) ||
!compat_handle_okay(cmp.atpb.idxs, size) ||
if ( copy_from_guest(&cmp.atpb, compat, 1) )
return -EFAULT;
size = cmp.atpb.size;
if ( !compat_handle_okay(cmp.atpb.idxs, size) ||
!compat_handle_okay(cmp.atpb.gpfns, size) ||
!compat_handle_okay(cmp.atpb.errs, size) )
return -EFAULT;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.