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);
|
||||
if (!expires)
|
||||
return -EPERM;
|
||||
|
||||
spin_lock_bh(&ip6_fl_lock);
|
||||
fl->lastuse = jiffies;
|
||||
if (time_before(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;
|
||||
if (time_before(fl->expires, fl->lastuse + expires))
|
||||
fl->expires = fl->lastuse + expires;
|
||||
spin_unlock_bh(&ip6_fl_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue