lsm,selinux: pass flowi_common instead of flowi to the LSM hooks
[ Upstream commit 3df98d79215ace13d1e91ddfc5a67a0f5acbd83f ] As pointed out by Herbert in a recent related patch, the LSM hooks do not have the necessary address family information to use the flowi struct safely. As none of the LSMs currently use any of the protocol specific flowi information, replace the flowi pointers with pointers to the address family independent flowi_common struct. Reported-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: James Morris <jamorris@linux.microsoft.com> Signed-off-by: Paul Moore <paul@paul-moore.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
a67a1661cf
commit
6950ee32c1
@@ -49,7 +49,7 @@ static int send4(struct wg_device *wg, struct sk_buff *skb,
|
||||
rt = dst_cache_get_ip4(cache, &fl.saddr);
|
||||
|
||||
if (!rt) {
|
||||
security_sk_classify_flow(sock, flowi4_to_flowi(&fl));
|
||||
security_sk_classify_flow(sock, flowi4_to_flowi_common(&fl));
|
||||
if (unlikely(!inet_confirm_addr(sock_net(sock), NULL, 0,
|
||||
fl.saddr, RT_SCOPE_HOST))) {
|
||||
endpoint->src4.s_addr = 0;
|
||||
@@ -129,7 +129,7 @@ static int send6(struct wg_device *wg, struct sk_buff *skb,
|
||||
dst = dst_cache_get_ip6(cache, &fl.saddr);
|
||||
|
||||
if (!dst) {
|
||||
security_sk_classify_flow(sock, flowi6_to_flowi(&fl));
|
||||
security_sk_classify_flow(sock, flowi6_to_flowi_common(&fl));
|
||||
if (unlikely(!ipv6_addr_any(&fl.saddr) &&
|
||||
!ipv6_chk_addr(sock_net(sock), &fl.saddr, NULL, 0))) {
|
||||
endpoint->src6 = fl.saddr = in6addr_any;
|
||||
|
Reference in New Issue
Block a user