]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Always allow MAX_LL_HEADER_LEN for the link-layer header
authorMichael Brown <mcb30@ipxe.org>
Fri, 19 Nov 2010 15:32:05 +0000 (15:32 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 19 Nov 2010 16:08:04 +0000 (16:08 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_snp.c

index 01b6b506bb2802a73fd1d2539040fbfa3ad9384d..43620f57e22ae594c2ef431eb0aa1171ed609db7 100644 (file)
@@ -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 */