From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Abd-El-Malek Subject: [PATCH] Replace hypervisor assert Date: Fri, 11 Apr 2008 02:04:13 -0400 Message-ID: <47FEFF5D.8070704@cmu.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030501010102010203050600" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------030501010102010203050600 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit While trying to run a 32-bit PV domU on a 64-bit hypervisor, I triggered an assert in the hypervisor. The assert dealt with the maximum number of grants that a domU can have. I made the hypervisor a bit more graceful by returning an error rather than asserting. Signed-off-by: Michael Abd-El-Malek --------------030501010102010203050600 Content-Type: text/plain; name="vmm-grant-fix.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="vmm-grant-fix.txt" diff -r 304d4c6b3bfe -r 2a1818b9d63a xen/common/compat/grant_table.c --- a/xen/common/compat/grant_table.c Mon Mar 31 15:54:41 2008 -0400 +++ b/xen/common/compat/grant_table.c Fri Apr 11 01:58:35 2008 -0400 @@ -109,12 +109,19 @@ int compat_grant_table_op(unsigned int c rc = -EFAULT; else { - BUG_ON((COMPAT_ARG_XLAT_SIZE - sizeof(*nat.setup)) / sizeof(*nat.setup->frame_list.p) < max_nr_grant_frames); + unsigned int max_frame_list_size_in_page = + (COMPAT_ARG_XLAT_SIZE - sizeof(*nat.setup)) / sizeof(*nat.setup->frame_list.p); + if (max_frame_list_size_in_page < max_nr_grant_frames) { + printk("max_nr_grant_frames is too large (%u,%u)\n", + max_nr_grant_frames, max_frame_list_size_in_page); + rc = -EINVAL; + } else { #define XLAT_gnttab_setup_table_HNDL_frame_list(_d_, _s_) \ - set_xen_guest_handle((_d_)->frame_list, (unsigned long *)(nat.setup + 1)) - XLAT_gnttab_setup_table(nat.setup, &cmp.setup); + set_xen_guest_handle((_d_)->frame_list, (unsigned long *)(nat.setup + 1)) + XLAT_gnttab_setup_table(nat.setup, &cmp.setup); #undef XLAT_gnttab_setup_table_HNDL_frame_list - rc = gnttab_setup_table(guest_handle_cast(nat.uop, gnttab_setup_table_t), 1); + rc = gnttab_setup_table(guest_handle_cast(nat.uop, gnttab_setup_table_t), 1); + } } if ( rc == 0 ) { --------------030501010102010203050600 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------030501010102010203050600--