lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 27 Jan 2011 22:18:53 -0800 From: Jeff Kirsher <jeffrey.t.kirsher@...el.com> To: davem@...emloft.net Cc: Amir Hanania <amir.hanania@...el.com>, netdev@...r.kernel.org, gospo@...hat.com, bphilips@...ell.com, Jeff Kirsher <jeffrey.t.kirsher@...el.com> Subject: [net-2.6 5/7] ixgbe: DDP last buffer size work around From: Amir Hanania <amir.hanania@...el.com> We found a hardware erratum on 82599 hardware that can lead to buffer overwriting if the last buffer in FCoE DDP is exactly PAGE_SIZE. If this is the case, we will make sure that there is no HW access to this buffer. Please see the 82599 Specification Update for more information. Signed-off-by: Amir Hanania <amir.hanania@...el.com> Tested-by: Ross Brattain <ross.b.brattain@...el.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@...el.com> --- drivers/net/ixgbe/ixgbe_fcoe.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_fcoe.c b/drivers/net/ixgbe/ixgbe_fcoe.c index 6342d48..ffac3f6 100644 --- a/drivers/net/ixgbe/ixgbe_fcoe.c +++ b/drivers/net/ixgbe/ixgbe_fcoe.c @@ -254,6 +254,25 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid, /* only the last buffer may have non-full bufflen */ lastsize = thisoff + thislen; + /* + * lastsize can not be PAGE_SIZE. + * If it is then adding another buffer with lastsize = 1. + * Since lastsize is 1 there will be no HW access to this buffer. + */ + if (lastsize == PAGE_SIZE) { + if (j == (IXGBE_BUFFCNT_MAX - 1)) { + e_err(drv, "xid=%x:%d,%d,%d:addr=%llx " + "not enough descriptors only since lastsize " + "is PAGE_SIZE\n", + xid, i, j, dmacount, (u64)addr); + goto out_noddp_free; + } + + ddp->udl[j+1] = ddp->udl[j]; + j++; + lastsize = 1; + } + fcbuff = (IXGBE_FCBUFF_4KB << IXGBE_FCBUFF_BUFFSIZE_SHIFT); fcbuff |= ((j & 0xff) << IXGBE_FCBUFF_BUFFCNT_SHIFT); fcbuff |= (firstoff << IXGBE_FCBUFF_OFFSET_SHIFT); -- 1.7.3.5 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists