ipv6: protect flow label renew against GC
Take ip6_fl_lock before to read and update a label. v2: protect only the relevant code Reported-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: Florent Fourcot <florent.fourcot@enst-bretagne.fr> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
53b47106c0
commit
394055f6fa
@ -345,6 +345,8 @@ static int fl6_renew(struct ip6_flowlabel *fl, unsigned long linger, unsigned lo
|
|||||||
expires = check_linger(expires);
|
expires = check_linger(expires);
|
||||||
if (!expires)
|
if (!expires)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
|
spin_lock_bh(&ip6_fl_lock);
|
||||||
fl->lastuse = jiffies;
|
fl->lastuse = jiffies;
|
||||||
if (time_before(fl->linger, linger))
|
if (time_before(fl->linger, linger))
|
||||||
fl->linger = linger;
|
fl->linger = linger;
|
||||||
@ -352,6 +354,8 @@ static int fl6_renew(struct ip6_flowlabel *fl, unsigned long linger, unsigned lo
|
|||||||
expires = fl->linger;
|
expires = fl->linger;
|
||||||
if (time_before(fl->expires, fl->lastuse + expires))
|
if (time_before(fl->expires, fl->lastuse + expires))
|
||||||
fl->expires = fl->lastuse + expires;
|
fl->expires = fl->lastuse + expires;
|
||||||
|
spin_unlock_bh(&ip6_fl_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user