From 308615cd97ec9a17cdbd184626038ef5e5e28443 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 19 Nov 2010 15:32:05 +0000 Subject: [PATCH] [efi] Always allow MAX_LL_HEADER_LEN for the link-layer header Signed-off-by: Michael Brown --- src/interface/efi/efi_snp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/interface/efi/efi_snp.c b/src/interface/efi/efi_snp.c index 01b6b506b..43620f57e 100644 --- a/src/interface/efi/efi_snp.c +++ b/src/interface/efi/efi_snp.c @@ -530,6 +530,7 @@ efi_snp_transmit ( EFI_SIMPLE_NETWORK_PROTOCOL *snp, container_of ( snp, struct efi_snp_device, snp ); struct ll_protocol *ll_protocol = snpdev->netdev->ll_protocol; struct io_buffer *iobuf; + size_t ll_headroom; int rc; EFI_STATUS efirc; @@ -582,13 +583,15 @@ efi_snp_transmit ( EFI_SIMPLE_NETWORK_PROTOCOL *snp, } /* Allocate buffer */ - iobuf = alloc_iob ( len ); + ll_headroom = ( MAX_LL_HEADER_LEN - ll_header_len ); + iobuf = alloc_iob ( ll_headroom + len ); if ( ! iobuf ) { DBGC ( snpdev, "SNPDEV %p TX could not allocate %ld-byte " "buffer\n", snpdev, ( ( unsigned long ) len ) ); efirc = EFI_DEVICE_ERROR; goto err_alloc_iob; } + iob_reserve ( iobuf, ll_headroom ); memcpy ( iob_put ( iobuf, len ), data, len ); /* Create link-layer header, if specified */