| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Richard Haines <richard_c_haines@btinternet.com> |
| Date: Mon, 13 Nov 2017 20:54:22 +0000 |
| Subject: netlabel: If PF_INET6, check sk_buff ip header version |
| |
| From: Richard Haines <richard_c_haines@btinternet.com> |
| |
| [ Upstream commit 213d7f94775322ba44e0bbb55ec6946e9de88cea ] |
| |
| When resolving a fallback label, check the sk_buff version as it |
| is possible (e.g. SCTP) to have family = PF_INET6 while |
| receiving ip_hdr(skb)->version = 4. |
| |
| Signed-off-by: Richard Haines <richard_c_haines@btinternet.com> |
| Acked-by: Paul Moore <paul@paul-moore.com> |
| Signed-off-by: Paul Moore <paul@paul-moore.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/netlabel/netlabel_unlabeled.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/net/netlabel/netlabel_unlabeled.c |
| +++ b/net/netlabel/netlabel_unlabeled.c |
| @@ -1469,6 +1469,16 @@ int netlbl_unlabel_getattr(const struct |
| iface = rcu_dereference(netlbl_unlhsh_def); |
| if (iface == NULL || !iface->valid) |
| goto unlabel_getattr_nolabel; |
| + |
| +#if IS_ENABLED(CONFIG_IPV6) |
| + /* When resolving a fallback label, check the sk_buff version as |
| + * it is possible (e.g. SCTP) to have family = PF_INET6 while |
| + * receiving ip_hdr(skb)->version = 4. |
| + */ |
| + if (family == PF_INET6 && ip_hdr(skb)->version == 4) |
| + family = PF_INET; |
| +#endif /* IPv6 */ |
| + |
| switch (family) { |
| case PF_INET: { |
| struct iphdr *hdr4; |