x86/shadow: fix refcount overflow check

Commit c385d27079 ("x86 shadow: for multi-page shadows, explicitly track
the first page") reduced the refcount width to 25, without adjusting the
overflow check. Eliminate the disconnect by using a manifest constant.

Interestingly, up to commit 047782fa01 ("Out-of-sync L1 shadows: OOS
snapshot") the refcount was 27 bits wide, yet the check was already
using 26.

This is XSA-249.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: George Dunlap <george.dunlap@citrix.com>
Reviewed-by: Tim Deegan <tim@xen.org>
master commit: 54e2292e8d
master date: 2017-12-12 14:29:13 +0100
This commit is contained in:
Jan Beulich committed 2017-12-12 14:44:23 +01:00
1 parent a66b8147e9
commit 5069fdde82
2 files changed
+3 -2

No files matched your search

+1 -1
View File
@@ -532,7 +532,7 @@ static inline int sh_get_ref(struct domain *d, mfn_t smfn, paddr_t entry_pa)
x = sp->u.sh.count;
nx = x + 1;
if ( unlikely(nx >= 1U<<26) )
if ( unlikely(nx >= (1U << PAGE_SH_REFCOUNT_WIDTH)) )
{
SHADOW_PRINTK("shadow ref overflow, gmfn=%lx smfn=%lx\n",
__backpointer(sp), mfn_x(smfn));
+2 -1
View File
@@ -83,7 +83,8 @@ struct page_info
unsigned long type:5; /* What kind of shadow is this? */
unsigned long pinned:1; /* Is the shadow pinned? */
unsigned long head:1; /* Is this the first page of the shadow? */
unsigned long count:25; /* Reference count */
#define PAGE_SH_REFCOUNT_WIDTH 25
unsigned long count:PAGE_SH_REFCOUNT_WIDTH; /* Reference count */
} sh;
/* Page is on a free list: ((count_info & PGC_count_mask) == 0). */
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.