123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- From 88795538726a5bbfd9efc13d441cb05e1d7fc139 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
- Date: Tue, 27 Jun 2017 14:20:00 -0400
- Subject: [PATCH] resolved: do not allocate packets with minimum size
- dns_packet_new() is sometimes called with mtu == 0, and in that case we should
- allocate more than the absolute minimum (which is the dns packet header size),
- otherwise we have to resize immediately again after appending the first data to
- the packet.
- This partially reverts the previous commit.
- [Upstream commit: https://github.com/systemd/systemd/commit/88795538726a5bbfd9efc13d441cb05e1d7fc139]
- Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
- ---
- src/resolve/resolved-dns-packet.c | 12 +++++++++++-
- 1 file changed, 11 insertions(+), 1 deletion(-)
- diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c
- index 821b66e266..d1f0f760a4 100644
- --- a/src/resolve/resolved-dns-packet.c
- +++ b/src/resolve/resolved-dns-packet.c
- @@ -28,6 +28,9 @@
-
- #define EDNS0_OPT_DO (1<<15)
-
- +#define DNS_PACKET_SIZE_START 512
- +assert_cc(DNS_PACKET_SIZE_START > UDP_PACKET_HEADER_SIZE)
- +
- typedef struct DnsPacketRewinder {
- DnsPacket *packet;
- size_t saved_rindex;
- @@ -47,7 +50,14 @@ int dns_packet_new(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
-
- assert(ret);
-
- - a = MAX(mtu, DNS_PACKET_HEADER_SIZE);
- + /* When dns_packet_new() is called with mtu == 0, allocate more than the
- + * absolute minimum (which is the dns packet header size), to avoid
- + * resizing immediately again after appending the first data to the packet.
- + */
- + if (mtu < UDP_PACKET_HEADER_SIZE)
- + a = DNS_PACKET_SIZE_START;
- + else
- + a = MAX(mtu, DNS_PACKET_HEADER_SIZE);
-
- /* round up to next page size */
- a = PAGE_ALIGN(ALIGN(sizeof(DnsPacket)) + a) - ALIGN(sizeof(DnsPacket));
|