diff options
| author | Stephen Hemminger <shemminger@osdl.org> | 2006-05-25 18:09:37 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2006-06-18 00:26:04 -0400 |
| commit | 23dbe7912dad6be71bb9e69cb819d05e2442d362 (patch) | |
| tree | 89fedd1d2c2c1ab710cfd90e8a8bb1f513935797 /net/llc | |
| parent | 29efcd2666b3a465b40aa07ef1f4d79847303e2f (diff) | |
[LLC]: use rcu_dereference on receive handler
The receive hander pointer might be modified during network changes
of protocol. So use rcu_dereference (only matters on alpha).
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/llc')
| -rw-r--r-- | net/llc/llc_input.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/llc/llc_input.c b/net/llc/llc_input.c index d62e0f9b9d..cb9f7f058f 100644 --- a/net/llc/llc_input.c +++ b/net/llc/llc_input.c | |||
| @@ -142,6 +142,8 @@ int llc_rcv(struct sk_buff *skb, struct net_device *dev, | |||
| 142 | struct llc_sap *sap; | 142 | struct llc_sap *sap; |
| 143 | struct llc_pdu_sn *pdu; | 143 | struct llc_pdu_sn *pdu; |
| 144 | int dest; | 144 | int dest; |
| 145 | int (*rcv)(struct sk_buff *, struct net_device *, | ||
| 146 | struct packet_type *, struct net_device *); | ||
| 145 | 147 | ||
| 146 | /* | 148 | /* |
| 147 | * When the interface is in promisc. mode, drop all the crap that it | 149 | * When the interface is in promisc. mode, drop all the crap that it |
| @@ -169,8 +171,9 @@ int llc_rcv(struct sk_buff *skb, struct net_device *dev, | |||
| 169 | * First the upper layer protocols that don't need the full | 171 | * First the upper layer protocols that don't need the full |
| 170 | * LLC functionality | 172 | * LLC functionality |
| 171 | */ | 173 | */ |
| 172 | if (sap->rcv_func) { | 174 | rcv = rcu_dereference(sap->rcv_func); |
| 173 | sap->rcv_func(skb, dev, pt, orig_dev); | 175 | if (rcv) { |
| 176 | rcv(skb, dev, pt, orig_dev); | ||
| 174 | goto out_put; | 177 | goto out_put; |
| 175 | } | 178 | } |
| 176 | dest = llc_pdu_type(skb); | 179 | dest = llc_pdu_type(skb); |
