[ 3.8.y.z extended stable ] Patch "ipv4: sendto/hdrincl: don't use destination address found in header" has been added to staging queue
Kamal Mostafa
kamal at canonical.com
Tue Oct 1 16:24:10 UTC 2013
This is a note to let you know that I have just added a patch titled
ipv4: sendto/hdrincl: don't use destination address found in header
to the linux-3.8.y-queue branch of the 3.8.y.z extended stable tree
which can be found at:
http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.8.y-queue
This patch is scheduled to be released in version 3.8.13.11.
If you, or anyone else, feels it should not be added to this tree, please
reply to this email.
For more information about the 3.8.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
Thanks.
-Kamal
------
>From a3975b0510e6779cb18e5f14e1e346e161638b4e Mon Sep 17 00:00:00 2001
From: Chris Clark <chris.clark at alcatel-lucent.com>
Date: Tue, 27 Aug 2013 12:02:15 -0600
Subject: ipv4: sendto/hdrincl: don't use destination address found in header
[ Upstream commit c27c9322d015dc1d9dfdf31724fca71c0476c4d1 ]
ipv4: raw_sendmsg: don't use header's destination address
A sendto() regression was bisected and found to start with commit
f8126f1d5136be1 (ipv4: Adjust semantics of rt->rt_gateway.)
The problem is that it tries to ARP-lookup the constructed packet's
destination address rather than the explicitly provided address.
Fix this using FLOWI_FLAG_KNOWN_NH so that given nexthop is used.
cf. commit 2ad5b9e4bd314fc685086b99e90e5de3bc59e26b
Reported-by: Chris Clark <chris.clark at alcatel-lucent.com>
Bisected-by: Chris Clark <chris.clark at alcatel-lucent.com>
Tested-by: Chris Clark <chris.clark at alcatel-lucent.com>
Suggested-by: Julian Anastasov <ja at ssi.bg>
Signed-off-by: Chris Clark <chris.clark at alcatel-lucent.com>
Signed-off-by: David S. Miller <davem at davemloft.net>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
---
net/ipv4/raw.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 6f08991..47b4797 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -573,7 +573,8 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos,
RT_SCOPE_UNIVERSE,
inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol,
- inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP,
+ inet_sk_flowi_flags(sk) | FLOWI_FLAG_CAN_SLEEP |
+ (inet->hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),
daddr, saddr, 0, 0);
if (!inet->hdrincl) {
--
1.8.1.2
More information about the kernel-team
mailing list