Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/811347/?format=api
{ "id": 811347, "url": "http://patchwork.ozlabs.org/api/patches/811347/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170908070142.4440-7-daniel.axtens@canonical.com/", "project": { "id": 15, "url": "http://patchwork.ozlabs.org/api/projects/15/?format=api", "name": "Ubuntu Kernel", "link_name": "ubuntu-kernel", "list_id": "kernel-team.lists.ubuntu.com", "list_email": "kernel-team@lists.ubuntu.com", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170908070142.4440-7-daniel.axtens@canonical.com>", "list_archive_url": null, "date": "2017-09-08T07:01:41", "name": "[SRU,Xenial,6/7] net: use dst_confirm_neigh for UDP, RAW, ICMP, L2TP", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "306c11ec3a7a628a3ba9671001c478156471a29f", "submitter": { "id": 71548, "url": "http://patchwork.ozlabs.org/api/people/71548/?format=api", "name": "Daniel Axtens", "email": "daniel.axtens@canonical.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20170908070142.4440-7-daniel.axtens@canonical.com/mbox/", "series": [ { "id": 2112, "url": "http://patchwork.ozlabs.org/api/series/2112/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=2112", "date": "2017-09-08T07:01:35", "name": "Fixes for LP#1715812", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2112/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/811347/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/811347/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<kernel-team-bounces@lists.ubuntu.com>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com\n\t(client-ip=91.189.94.19; helo=huckleberry.canonical.com;\n\tenvelope-from=kernel-team-bounces@lists.ubuntu.com;\n\treceiver=<UNKNOWN>)", "Received": [ "from huckleberry.canonical.com (huckleberry.canonical.com\n\t[91.189.94.19])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpStW2HNjz9t16;\n\tFri, 8 Sep 2017 17:02:11 +1000 (AEST)", "from localhost ([127.0.0.1] helo=huckleberry.canonical.com)\n\tby huckleberry.canonical.com with esmtp (Exim 4.86_2)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1dqDIm-0001Mx-DC; Fri, 08 Sep 2017 07:02:08 +0000", "from youngberry.canonical.com ([91.189.89.112])\n\tby huckleberry.canonical.com with esmtps\n\t(TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128)\n\t(Exim 4.86_2) (envelope-from <daniel.axtens@canonical.com>)\n\tid 1dqDIj-0001LJ-My\n\tfor kernel-team@lists.canonical.com; Fri, 08 Sep 2017 07:02:05 +0000", "from mail-pg0-f70.google.com ([74.125.83.70])\n\tby youngberry.canonical.com with esmtps\n\t(TLS1.0:RSA_AES_128_CBC_SHA1:16)\n\t(Exim 4.76) (envelope-from <daniel.axtens@canonical.com>)\n\tid 1dqDIj-0003De-BF\n\tfor kernel-team@lists.canonical.com; Fri, 08 Sep 2017 07:02:05 +0000", "by mail-pg0-f70.google.com with SMTP id m9so3670761pgd.2\n\tfor <kernel-team@lists.canonical.com>;\n\tFri, 08 Sep 2017 00:02:05 -0700 (PDT)", "from localhost.localdomain (124-171-202-56.dyn.iinet.net.au.\n\t[124.171.202.56]) by smtp.gmail.com with ESMTPSA id\n\th1sm2255518pfg.153.2017.09.08.00.02.00\n\tfor <kernel-team@lists.canonical.com>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 08 Sep 2017 00:02:01 -0700 (PDT)" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=cgS8m6Ztn55wnDgpkDY3eo8XvLCedmwj/oh0yBxZLhQ=;\n\tb=LPpKYwaJTrBH/Jz4qOzC0zuGJ0Qie4eyCRjW0Cxs+BYhGNU3agu7f/X6kkAL/tbicU\n\t/4P4x1Ms23AEip1p+kevSXRXdwaZ4qaPSBa+j/+Mc/goulArweJW3MW7bCJWDViUiRus\n\tgL8zaLJXBYDA22xT0xDwdNNEPc2uNjuC75mpK6vIMUMrORvAIgioFZ/ytFZ36m8Gs8WT\n\tB+E3sxLeb/urW/pwNcVm7oZZWyKQPpnYGdS/v7Jr+GhNF6F2ukTUecMoO7PGuw334BSP\n\tNpE5RjSwH7fouYQgxI8kU3LG2haHr6dXOn9oxKCbApUA/zPOWEiFVccZcP0/sNegSkEu\n\tYg1g==", "X-Gm-Message-State": "AHPjjUjBvOnKtbIRaIUPtiRV8BK6FGmKkv37l9XRccfAtl7Vu8Y+H6zb\n\tQM5SAVgYSrmv2iixionxmoeN1DNdWlNGPvqDN3wNEtgiyb+9x90f52ocxGcTKL9L241k9J3ey6b\n\tnq9AiwbfHz9r3Ain+kd5HB5Mkj90IZLH0a2NQ0wE=", "X-Received": [ "by 10.98.32.92 with SMTP id g89mr2082702pfg.285.1504854123130;\n\tFri, 08 Sep 2017 00:02:03 -0700 (PDT)", "by 10.98.32.92 with SMTP id g89mr2082676pfg.285.1504854122538;\n\tFri, 08 Sep 2017 00:02:02 -0700 (PDT)" ], "X-Google-Smtp-Source": "ADKCNb7YYh7Bc4plBhXwfwJuC9A+JYBJrMKmXVH3E5CckzqxdrtwK06Bez2Jj3HmqXFBTfxV9ePYjg==", "From": "Daniel Axtens <daniel.axtens@canonical.com>", "To": "kernel-team@lists.canonical.com", "Subject": "[SRU][Xenial][PATCH 6/7] net: use dst_confirm_neigh for UDP, RAW,\n\tICMP, L2TP", "Date": "Fri, 8 Sep 2017 17:01:41 +1000", "Message-Id": "<20170908070142.4440-7-daniel.axtens@canonical.com>", "X-Mailer": "git-send-email 2.11.0", "In-Reply-To": "<20170908070142.4440-1-daniel.axtens@canonical.com>", "References": "<20170908070142.4440-1-daniel.axtens@canonical.com>", "X-BeenThere": "kernel-team@lists.ubuntu.com", "X-Mailman-Version": "2.1.20", "Precedence": "list", "List-Id": "Kernel team discussions <kernel-team.lists.ubuntu.com>", "List-Unsubscribe": "<https://lists.ubuntu.com/mailman/options/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>", "List-Archive": "<https://lists.ubuntu.com/archives/kernel-team>", "List-Post": "<mailto:kernel-team@lists.ubuntu.com>", "List-Help": "<mailto:kernel-team-request@lists.ubuntu.com?subject=help>", "List-Subscribe": "<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "kernel-team-bounces@lists.ubuntu.com", "Sender": "\"kernel-team\" <kernel-team-bounces@lists.ubuntu.com>" }, "content": "From: Julian Anastasov <ja@ssi.bg>\n\nBugLink: https://bugs.launchpad.net/bugs/1715812\n\nWhen same struct dst_entry can be used for many different\nneighbours we can not use it for pending confirmations.\n\nThe datagram protocols can use MSG_CONFIRM to confirm the\nneighbour. When used with MSG_PROBE we do not reach the\ncode where neighbour is confirmed, so we have to do the\nsame slow lookup by using the dst_confirm_neigh() helper.\nWhen MSG_PROBE is not used, ip_append_data/ip6_append_data\nwill set the skb flag dst_pending_confirm.\n\nReported-by: YueHaibing <yuehaibing@huawei.com>\nFixes: 5110effee8fd (\"net: Do delayed neigh confirmation.\")\nFixes: f2bb4bedf35d (\"ipv4: Cache output routes in fib_info nexthops.\")\nSigned-off-by: Julian Anastasov <ja@ssi.bg>\nAcked-by: Eric Dumazet <edumazet@google.com>\nSigned-off-by: David S. Miller <davem@davemloft.net>\n(backported from commit 0dec879f636f11b0ffda1cb5fd96a1754c59ead3)\nSigned-off-by: Daniel Axtens <daniel.axtens@canonical.com>\n---\n net/ipv4/ip_output.c | 6 ++++++\n net/ipv4/ping.c | 3 ++-\n net/ipv4/raw.c | 6 +++++-\n net/ipv4/udp.c | 3 ++-\n net/ipv6/ip6_output.c | 6 ++++++\n net/ipv6/raw.c | 6 +++++-\n net/ipv6/route.c | 27 ++++++++++++++-------------\n net/ipv6/udp.c | 3 ++-\n net/l2tp/l2tp_ip6.c | 3 ++-\n 9 files changed, 44 insertions(+), 19 deletions(-)", "diff": "diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c\nindex 17030a6bed20..b69c680d1a5c 100644\n--- a/net/ipv4/ip_output.c\n+++ b/net/ipv4/ip_output.c\n@@ -853,6 +853,9 @@ static inline int ip_ufo_append_data(struct sock *sk,\n \n \t\tskb->csum = 0;\n \n+\t\tif (flags & MSG_CONFIRM)\n+\t\t\tskb_set_dst_pending_confirm(skb, 1);\n+\n \t\t__skb_queue_tail(queue, skb);\n \t} else if (skb_is_gso(skb)) {\n \t\tgoto append;\n@@ -1055,6 +1058,9 @@ alloc_new_skb:\n \t\t\texthdrlen = 0;\n \t\t\tcsummode = CHECKSUM_NONE;\n \n+\t\t\tif ((flags & MSG_CONFIRM) && !skb_prev)\n+\t\t\t\tskb_set_dst_pending_confirm(skb, 1);\n+\n \t\t\t/*\n \t\t\t * Put the packet on the pending queue.\n \t\t\t */\ndiff --git a/net/ipv4/ping.c b/net/ipv4/ping.c\nindex 37a3b05d175c..c173d794c72c 100644\n--- a/net/ipv4/ping.c\n+++ b/net/ipv4/ping.c\n@@ -852,7 +852,8 @@ out:\n \treturn err;\n \n do_confirm:\n-\tdst_confirm(&rt->dst);\n+\tif (msg->msg_flags & MSG_PROBE)\n+\t\tdst_confirm_neigh(&rt->dst, &fl4.daddr);\n \tif (!(msg->msg_flags & MSG_PROBE) || len)\n \t\tgoto back_from_confirm;\n \terr = 0;\ndiff --git a/net/ipv4/raw.c b/net/ipv4/raw.c\nindex 8f2cd7d09720..1f14994f8349 100644\n--- a/net/ipv4/raw.c\n+++ b/net/ipv4/raw.c\n@@ -382,6 +382,9 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4,\n \n \tsock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);\n \n+\tif (flags & MSG_CONFIRM)\n+\t\tskb_set_dst_pending_confirm(skb, 1);\n+\n \tskb->transport_header = skb->network_header;\n \terr = -EFAULT;\n \tif (memcpy_from_msg(iph, msg, length))\n@@ -670,7 +673,8 @@ out:\n \treturn len;\n \n do_confirm:\n-\tdst_confirm(&rt->dst);\n+\tif (msg->msg_flags & MSG_PROBE)\n+\t\tdst_confirm_neigh(&rt->dst, &fl4.daddr);\n \tif (!(msg->msg_flags & MSG_PROBE) || len)\n \t\tgoto back_from_confirm;\n \terr = 0;\ndiff --git a/net/ipv4/udp.c b/net/ipv4/udp.c\nindex 301e60829c7e..6cb4565e4bcc 100644\n--- a/net/ipv4/udp.c\n+++ b/net/ipv4/udp.c\n@@ -1123,7 +1123,8 @@ out:\n \treturn err;\n \n do_confirm:\n-\tdst_confirm(&rt->dst);\n+\tif (msg->msg_flags & MSG_PROBE)\n+\t\tdst_confirm_neigh(&rt->dst, &fl4->daddr);\n \tif (!(msg->msg_flags&MSG_PROBE) || len)\n \t\tgoto back_from_confirm;\n \terr = 0;\ndiff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c\nindex f3d5b42584e6..4b775a2269b9 100644\n--- a/net/ipv6/ip6_output.c\n+++ b/net/ipv6/ip6_output.c\n@@ -1134,6 +1134,9 @@ static inline int ip6_ufo_append_data(struct sock *sk,\n \t\tskb->protocol = htons(ETH_P_IPV6);\n \t\tskb->csum = 0;\n \n+\t\tif (flags & MSG_CONFIRM)\n+\t\t\tskb_set_dst_pending_confirm(skb, 1);\n+\n \t\t__skb_queue_tail(queue, skb);\n \t} else if (skb_is_gso(skb)) {\n \t\tgoto append;\n@@ -1507,6 +1510,9 @@ alloc_new_skb:\n \t\t\texthdrlen = 0;\n \t\t\tdst_exthdrlen = 0;\n \n+\t\t\tif ((flags & MSG_CONFIRM) && !skb_prev)\n+\t\t\t\tskb_set_dst_pending_confirm(skb, 1);\n+\n \t\t\t/*\n \t\t\t * Put the packet on the pending queue\n \t\t\t */\ndiff --git a/net/ipv6/raw.c b/net/ipv6/raw.c\nindex 4d52a0e2f60d..cd2184c1caf9 100644\n--- a/net/ipv6/raw.c\n+++ b/net/ipv6/raw.c\n@@ -654,6 +654,9 @@ static int rawv6_send_hdrinc(struct sock *sk, struct msghdr *msg, int length,\n \n \tskb->ip_summed = CHECKSUM_NONE;\n \n+\tif (flags & MSG_CONFIRM)\n+\t\tskb_set_dst_pending_confirm(skb, 1);\n+\n \tskb->transport_header = skb->network_header;\n \terr = memcpy_from_msg(iph, msg, length);\n \tif (err)\n@@ -918,7 +921,8 @@ out:\n \ttxopt_put(opt_to_free);\n \treturn err < 0 ? err : len;\n do_confirm:\n-\tdst_confirm(dst);\n+\tif (msg->msg_flags & MSG_PROBE)\n+\t\tdst_confirm_neigh(dst, &fl6.daddr);\n \tif (!(msg->msg_flags & MSG_PROBE) || len)\n \t\tgoto back_from_confirm;\n \terr = 0;\ndiff --git a/net/ipv6/route.c b/net/ipv6/route.c\nindex bba100e85114..7cfcfbdd99f8 100644\n--- a/net/ipv6/route.c\n+++ b/net/ipv6/route.c\n@@ -1356,31 +1356,32 @@ static bool rt6_cache_allowed_for_pmtu(const struct rt6_info *rt)\n static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,\n \t\t\t\t const struct ipv6hdr *iph, u32 mtu)\n {\n+\tconst struct in6_addr *daddr, *saddr;\n \tstruct rt6_info *rt6 = (struct rt6_info *)dst;\n \n \tif (rt6->rt6i_flags & RTF_LOCAL)\n \t\treturn;\n \n-\tdst_confirm(dst);\n+\tif (iph) {\n+\t\tdaddr = &iph->daddr;\n+\t\tsaddr = &iph->saddr;\n+\t} else if (sk) {\n+\t\tdaddr = &sk->sk_v6_daddr;\n+\t\tsaddr = &inet6_sk(sk)->saddr;\n+\t} else {\n+\t\tdaddr = NULL;\n+\t\tsaddr = NULL;\n+\t}\n+\tdst_confirm_neigh(dst, daddr);\n \tmtu = max_t(u32, mtu, IPV6_MIN_MTU);\n \tif (mtu >= dst_mtu(dst))\n \t\treturn;\n \n \tif (!rt6_cache_allowed_for_pmtu(rt6)) {\n \t\trt6_do_update_pmtu(rt6, mtu);\n-\t} else {\n-\t\tconst struct in6_addr *daddr, *saddr;\n+\t} else if (daddr) {\n \t\tstruct rt6_info *nrt6;\n \n-\t\tif (iph) {\n-\t\t\tdaddr = &iph->daddr;\n-\t\t\tsaddr = &iph->saddr;\n-\t\t} else if (sk) {\n-\t\t\tdaddr = &sk->sk_v6_daddr;\n-\t\t\tsaddr = &inet6_sk(sk)->saddr;\n-\t\t} else {\n-\t\t\treturn;\n-\t\t}\n \t\tnrt6 = ip6_rt_cache_alloc(rt6, daddr, saddr);\n \t\tif (nrt6) {\n \t\t\trt6_do_update_pmtu(nrt6, mtu);\n@@ -2188,7 +2189,7 @@ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_bu\n \t * Look, redirects are sent only in response to data packets,\n \t * so that this nexthop apparently is reachable. --ANK\n \t */\n-\tdst_confirm(&rt->dst);\n+\tdst_confirm_neigh(&rt->dst, &ipv6_hdr(skb)->saddr);\n \n \tneigh = __neigh_lookup(&nd_tbl, &msg->target, skb->dev, 1);\n \tif (!neigh)\ndiff --git a/net/ipv6/udp.c b/net/ipv6/udp.c\nindex 6fd4af3b5b79..4ce78d96d97e 100644\n--- a/net/ipv6/udp.c\n+++ b/net/ipv6/udp.c\n@@ -1398,7 +1398,8 @@ out:\n \treturn err;\n \n do_confirm:\n-\tdst_confirm(dst);\n+\tif (msg->msg_flags & MSG_PROBE)\n+\t\tdst_confirm_neigh(dst, &fl6.daddr);\n \tif (!(msg->msg_flags&MSG_PROBE) || len)\n \t\tgoto back_from_confirm;\n \terr = 0;\ndiff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c\nindex bcdab1cba773..5cf39d2a3dbd 100644\n--- a/net/l2tp/l2tp_ip6.c\n+++ b/net/l2tp/l2tp_ip6.c\n@@ -642,7 +642,8 @@ out:\n \treturn err < 0 ? err : len;\n \n do_confirm:\n-\tdst_confirm(dst);\n+\tif (msg->msg_flags & MSG_PROBE)\n+\t\tdst_confirm_neigh(dst, &fl6.daddr);\n \tif (!(msg->msg_flags & MSG_PROBE) || len)\n \t\tgoto back_from_confirm;\n \terr = 0;\n", "prefixes": [ "SRU", "Xenial", "6/7" ] }