From e5446060e5ef0d263308281d559eab3f135c74e4 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Tue, 21 Feb 2012 02:57:33 +0000 Subject: [PATCH] --- yaml --- r: 290425 b: refs/heads/master c: 01cb543db8a2d2dbcea5f357365ce1327ac46193 h: refs/heads/master i: 290423: d538f63ba6bf7419e74391006fa72b90820f1e81 v: v3 --- [refs] | 2 +- trunk/drivers/net/ethernet/sfc/siena_sriov.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 5dfe38f99b5a..025ae20b35c3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c3cb2a874122889c036934294dbbb8ad82f53060 +refs/heads/master: 01cb543db8a2d2dbcea5f357365ce1327ac46193 diff --git a/trunk/drivers/net/ethernet/sfc/siena_sriov.c b/trunk/drivers/net/ethernet/sfc/siena_sriov.c index 5c6839ec3a83..80976e84eee6 100644 --- a/trunk/drivers/net/ethernet/sfc/siena_sriov.c +++ b/trunk/drivers/net/ethernet/sfc/siena_sriov.c @@ -796,12 +796,13 @@ static int efx_vfdi_set_status_page(struct efx_vf *vf) { struct efx_nic *efx = vf->efx; struct vfdi_req *req = vf->buf.addr; - unsigned int page_count; + u64 page_count = req->u.set_status_page.peer_page_count; + u64 max_page_count = + (EFX_PAGE_SIZE - + offsetof(struct vfdi_req, u.set_status_page.peer_page_addr[0])) + / sizeof(req->u.set_status_page.peer_page_addr[0]); - page_count = req->u.set_status_page.peer_page_count; - if (!req->u.set_status_page.dma_addr || EFX_PAGE_SIZE < - offsetof(struct vfdi_req, - u.set_status_page.peer_page_addr[page_count])) { + if (!req->u.set_status_page.dma_addr || page_count > max_page_count) { if (net_ratelimit()) netif_err(efx, hw, efx->net_dev, "ERROR: Invalid SET_STATUS_PAGE from %s\n",