summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWillem de Bruijn <willemb@google.com>2019-04-25 12:06:54 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-05-05 14:42:37 +0200
commitf78ec0cd0664cc1455caf0c18f3e7954ccce5e17 (patch)
tree99a5de5638264852d09cda827b79bbc59b10aafc
parent39eddbb7cab34ef3886c900b79ad16339103db9e (diff)
downloadlinux-stable-f78ec0cd0664cc1455caf0c18f3e7954ccce5e17.tar.gz
linux-stable-f78ec0cd0664cc1455caf0c18f3e7954ccce5e17.tar.bz2
linux-stable-f78ec0cd0664cc1455caf0c18f3e7954ccce5e17.zip
ipv6: invert flowlabel sharing check in process and user mode
[ Upstream commit 95c169251bf734aa555a1e8043e4d88ec97a04ec ] A request for a flowlabel fails in process or user exclusive mode must fail if the caller pid or uid does not match. Invert the test. Previously, the test was unsafe wrt PID recycling, but indeed tested for inequality: fl1->owner != fl->owner Fixes: 4f82f45730c68 ("net ip6 flowlabel: Make owner a union of struct pid* and kuid_t") Signed-off-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/ipv6/ip6_flowlabel.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
index 23a525c0a9be..be5f3d7ceb96 100644
--- a/net/ipv6/ip6_flowlabel.c
+++ b/net/ipv6/ip6_flowlabel.c
@@ -639,9 +639,9 @@ recheck:
if (fl1->share == IPV6_FL_S_EXCL ||
fl1->share != fl->share ||
((fl1->share == IPV6_FL_S_PROCESS) &&
- (fl1->owner.pid == fl->owner.pid)) ||
+ (fl1->owner.pid != fl->owner.pid)) ||
((fl1->share == IPV6_FL_S_USER) &&
- uid_eq(fl1->owner.uid, fl->owner.uid)))
+ !uid_eq(fl1->owner.uid, fl->owner.uid)))
goto release;
err = -ENOMEM;