tftp-roll-over-block-counter-to-prevent-timeouts-with-data-packets
This commit is contained in:
parent
e94a0d1ac7
commit
de29b962df
@ -0,0 +1,51 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Date: Mon, 24 Aug 2020 14:46:27 +0200
|
||||
Subject: [PATCH] tftp: roll over block counter to prevent timeouts with data
|
||||
packets
|
||||
|
||||
The block number is a 16-bit counter which only allows to fetch
|
||||
files no bigger than 65535 * blksize. To avoid this limit, the
|
||||
counter is rolled over. This behavior isn't defined in RFC 1350
|
||||
but is handled by many TFTP servers and it's what GRUB was doing
|
||||
before implicitly due an overflow.
|
||||
|
||||
Fixing that bug led to TFTP timeouts, since GRUB wasn't acking
|
||||
data packets anymore for files with size bigger than the maximum
|
||||
mentioned above. Restore the old behavior to prevent this issue.
|
||||
|
||||
Resolves: rhbz#1869335
|
||||
|
||||
Suggested-by: Peter Jones <pjones@redhat.com>
|
||||
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
---
|
||||
grub-core/net/tftp.c | 16 ++++++++++++++--
|
||||
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c
|
||||
index 22badd74316..acbb01c10e7 100644
|
||||
--- a/grub-core/net/tftp.c
|
||||
+++ b/grub-core/net/tftp.c
|
||||
@@ -183,8 +183,20 @@ tftp_receive (grub_net_udp_socket_t sock __attribute__ ((unused)),
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
- /* Ack old/retransmitted block. */
|
||||
- if (grub_be_to_cpu16 (tftph->u.data.block) < data->block + 1)
|
||||
+ /*
|
||||
+ * Ack old/retransmitted block.
|
||||
+ *
|
||||
+ * The block number is a 16-bit counter which only allows to fetch
|
||||
+ * files no bigger than 65535 * blksize. To avoid this limit, the
|
||||
+ * counter is rolled over. This behavior isn't defined in RFC 1350
|
||||
+ * but is handled by many TFTP servers and it's what GRUB was doing
|
||||
+ * before implicitly due an overflow.
|
||||
+ *
|
||||
+ * Fixing that bug led to TFTP timeouts, since GRUB wasn't acking
|
||||
+ * data packets anymore for files with size bigger than the maximum
|
||||
+ * mentioned above. Restore the old behavior to prevent this issue.
|
||||
+ */
|
||||
+ if (grub_be_to_cpu16 (tftph->u.data.block) < ((data->block + 1) & 0xffffu))
|
||||
ack (data, grub_be_to_cpu16 (tftph->u.data.block));
|
||||
/* Ignore unexpected block. */
|
||||
else if (grub_be_to_cpu16 (tftph->u.data.block) > data->block + 1)
|
||||
@ -247,3 +247,4 @@ Patch0246: 0246-loader-linux-Avoid-overflow-on-initrd-size-calculati.patch
|
||||
Patch0247: 0247-linux-Fix-integer-overflows-in-initrd-size-handling.patch
|
||||
Patch0248: 0248-linuxefi-fail-kernel-validation-without-shim-protoco.patch
|
||||
Patch0249: 0249-remove-08_fallback_counting.in-apply-grubby.patch
|
||||
Patch0250: 0250-tftp-roll-over-block-counter-to-prevent-timeouts-wit.patch
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
Name: grub2
|
||||
Epoch: 1
|
||||
Version: 2.04
|
||||
Release: 8
|
||||
Release: 9
|
||||
Summary: Bootloader with support for Linux, Multiboot and more
|
||||
License: GPLv3+
|
||||
URL: http://www.gnu.org/software/grub/
|
||||
@ -448,6 +448,13 @@ rm -r /boot/grub2.tmp/ || :
|
||||
%{_datadir}/man/man*
|
||||
|
||||
%changelog
|
||||
* Sat Feb 27 2021 fengtao <fengtao40@huawei.com> - 2.04-9
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
- SUG:NA
|
||||
- DESC:tftp roll over block counter to prevent timeouts with
|
||||
data packets
|
||||
|
||||
* Mon Feb 22 2021 zhangqiumiao <zhangqiumiao1@huawei.com> - 2.04-8
|
||||
- Type:bugfix
|
||||
- ID:NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user