mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO
[ Upstream commit 61e76b178d
]
RFC 4443 has defined two additional codes for ICMPv6 type 1 (destination
unreachable) messages:
5 - Source address failed ingress/egress policy
6 - Reject route to destination
Now they are treated as protocol error and icmpv6_err_convert() converts them
to EPROTO.
RFC 4443 says:
"Codes 5 and 6 are more informative subsets of code 1."
Treat codes 5 and 6 as code 1 (EACCES)
Btw, connect() returning -EPROTO confuses firefox, so that fallback to
other/IPv4 addresses does not work:
https://bugzilla.mozilla.org/show_bug.cgi?id=910773
Signed-off-by: Jiri Bohac <jbohac@suse.cz>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
98fadc18d2
commit
8708ea2b68
2 changed files with 11 additions and 1 deletions
|
@ -123,6 +123,8 @@ static inline struct icmp6hdr *icmp6_hdr(const struct sk_buff *skb)
|
|||
#define ICMPV6_NOT_NEIGHBOUR 2
|
||||
#define ICMPV6_ADDR_UNREACH 3
|
||||
#define ICMPV6_PORT_UNREACH 4
|
||||
#define ICMPV6_POLICY_FAIL 5
|
||||
#define ICMPV6_REJECT_ROUTE 6
|
||||
|
||||
/*
|
||||
* Codes for Time Exceeded
|
||||
|
|
|
@ -917,6 +917,14 @@ static const struct icmp6_err {
|
|||
.err = ECONNREFUSED,
|
||||
.fatal = 1,
|
||||
},
|
||||
{ /* POLICY_FAIL */
|
||||
.err = EACCES,
|
||||
.fatal = 1,
|
||||
},
|
||||
{ /* REJECT_ROUTE */
|
||||
.err = EACCES,
|
||||
.fatal = 1,
|
||||
},
|
||||
};
|
||||
|
||||
int icmpv6_err_convert(u8 type, u8 code, int *err)
|
||||
|
@ -928,7 +936,7 @@ int icmpv6_err_convert(u8 type, u8 code, int *err)
|
|||
switch (type) {
|
||||
case ICMPV6_DEST_UNREACH:
|
||||
fatal = 1;
|
||||
if (code <= ICMPV6_PORT_UNREACH) {
|
||||
if (code < ARRAY_SIZE(tab_unreach)) {
|
||||
*err = tab_unreach[code].err;
|
||||
fatal = tab_unreach[code].fatal;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue