{
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;
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, cmp.atpb.size) ||
- !compat_handle_okay(cmp.atpb.gpfns, cmp.atpb.size) ||
- !compat_handle_okay(cmp.atpb.errs, cmp.atpb.size) )
+ !compat_handle_okay(cmp.atpb.idxs, size) ||
+ !compat_handle_okay(cmp.atpb.gpfns, size) ||
+ !compat_handle_okay(cmp.atpb.errs, size) )
return -EFAULT;
end_extent = start_extent + limit;
- if ( end_extent > cmp.atpb.size )
- end_extent = cmp.atpb.size;
+ if ( end_extent > size )
+ end_extent = size;
idxs -= start_extent;
gpfns -= start_extent;