mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO
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 <[email protected]>
Acked-by: Hannes Frederic Sowa <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
a8787645e1
commit
61e76b178d
2 changed files with 11 additions and 1 deletions
|
|
@ -940,6 +940,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)
|
||||
|
|
@ -951,7 +959,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