summaryrefslogtreecommitdiff
authorWillem de Bruijn <willemb@google.com>2019-04-25 16:06:54 (GMT)
committer Greg Kroah-Hartman <gregkh@linuxfoundation.org>2019-05-08 05:19:05 (GMT)
commit493cbb3e9e83afef3418dcef3b6f951d2888f300 (patch)
tree8f1295b5732a236476c2df7299f46410e532bf86
parentbf533f481bc106e9319128f5decc84c81b7dd02e (diff)
downloadcommon-493cbb3e9e83afef3418dcef3b6f951d2888f300.zip
common-493cbb3e9e83afef3418dcef3b6f951d2888f300.tar.gz
common-493cbb3e9e83afef3418dcef3b6f951d2888f300.tar.bz2
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>
Diffstat
-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 9cf8661..8c2f9ae 100644
--- a/net/ipv6/ip6_flowlabel.c
+++ b/net/ipv6/ip6_flowlabel.c
@@ -640,9 +640,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;