From: Ian Campbell Date: Tue, 11 Sep 2012 12:17:27 +0000 (+0200) Subject: tmem: check for a valid client ("domain") in the save subops X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~7951 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3fed6db242883d824ab41c00920e0c96c058f3aa;p=xen.git tmem: check for a valid client ("domain") in the save subops This is part of XSA-15 / CVE-2012-3497. Signed-off-by: Ian Campbell Acked-by: Jan Beulich Acked-by: Dan Magenheimer Committed-by: Jan Beulich --- diff --git a/xen/common/tmem.c b/xen/common/tmem.c index 835c257e5f..86e7339fab 100644 --- a/xen/common/tmem.c +++ b/xen/common/tmem.c @@ -2379,12 +2379,18 @@ static NOINLINE int tmemc_save_subop(int cli_id, uint32_t pool_id, rc = MAX_POOLS_PER_DOMAIN; break; case TMEMC_SAVE_GET_CLIENT_WEIGHT: + if ( client == NULL ) + break; rc = client->weight == -1 ? -2 : client->weight; break; case TMEMC_SAVE_GET_CLIENT_CAP: + if ( client == NULL ) + break; rc = client->cap == -1 ? -2 : client->cap; break; case TMEMC_SAVE_GET_CLIENT_FLAGS: + if ( client == NULL ) + break; rc = (client->compress ? TMEM_CLIENT_COMPRESS : 0 ) | (client->was_frozen ? TMEM_CLIENT_FROZEN : 0 ); break; @@ -2408,6 +2414,8 @@ static NOINLINE int tmemc_save_subop(int cli_id, uint32_t pool_id, *uuid = pool->uuid[1]; rc = 0; case TMEMC_SAVE_END: + if ( client == NULL ) + break; client->live_migrating = 0; if ( !list_empty(&client->persistent_invalidated_list) ) list_for_each_entry_safe(pgp,pgp2,