mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
modify acquire_domstatic_pages to take an unsigned int size parameter
acquire_domstatic_pages currently takes an unsigned long nr_mfns parameter, but actually it cannot handle anything larger than an unsigned int nr_mfns. That's because acquire_domstatic_pages is based on assign_pages which also takes an unsigned int nr parameter. So modify the nr_mfns parameter of acquire_domstatic_pages to be unsigned int. There is only one caller in xen/arch/arm/domain_build.c:allocate_static_memory. Check that the value to be passed to acquire_domstatic_pages is no larger than UINT_MAX. If it is, print an error and goto fail. Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com> Acked-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
This commit is contained in:
1 parent
48a160f462
commit
437e88417b
3 files changed
+8
-2
No files matched your search
@@ -554,6 +554,12 @@ static void __init allocate_static_memory(struct domain *d,
|
||||
device_tree_get_reg(&cell, addr_cells, size_cells, &pbase, &psize);
|
||||
ASSERT(IS_ALIGNED(pbase, PAGE_SIZE) && IS_ALIGNED(psize, PAGE_SIZE));
|
||||
|
||||
if ( PFN_DOWN(psize) > UINT_MAX )
|
||||
{
|
||||
printk(XENLOG_ERR "%pd: static memory size too large: %#"PRIpaddr,
|
||||
d, psize);
|
||||
goto fail;
|
||||
}
|
||||
smfn = maddr_to_mfn(pbase);
|
||||
res = acquire_domstatic_pages(d, smfn, PFN_DOWN(psize), 0);
|
||||
if ( res )
|
||||
|
||||
@@ -2714,7 +2714,7 @@ static struct page_info * __init acquire_staticmem_pages(mfn_t smfn,
|
||||
* then assign them to one specific domain #d.
|
||||
*/
|
||||
int __init acquire_domstatic_pages(struct domain *d, mfn_t smfn,
|
||||
unsigned long nr_mfns, unsigned int memflags)
|
||||
unsigned int nr_mfns, unsigned int memflags)
|
||||
{
|
||||
struct page_info *pg;
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ bool scrub_free_pages(void);
|
||||
/* These functions are for static memory */
|
||||
void free_staticmem_pages(struct page_info *pg, unsigned long nr_mfns,
|
||||
bool need_scrub);
|
||||
int acquire_domstatic_pages(struct domain *d, mfn_t smfn, unsigned long nr_mfns,
|
||||
int acquire_domstatic_pages(struct domain *d, mfn_t smfn, unsigned int nr_mfns,
|
||||
unsigned int memflags);
|
||||
#endif
|
||||
|
||||
|
||||