diff options
-rw-r--r-- | net/l2tp/l2tp_ip.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index 962a607b51da..e13c166824e0 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c | |||
@@ -472,13 +472,15 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m | |||
472 | if (rt == NULL) { | 472 | if (rt == NULL) { |
473 | struct ip_options_rcu *inet_opt; | 473 | struct ip_options_rcu *inet_opt; |
474 | 474 | ||
475 | inet_opt = rcu_dereference_protected(inet->inet_opt, | 475 | rcu_read_lock(); |
476 | sock_owned_by_user(sk)); | 476 | inet_opt = rcu_dereference(inet->inet_opt); |
477 | 477 | ||
478 | /* Use correct destination address if we have options. */ | 478 | /* Use correct destination address if we have options. */ |
479 | if (inet_opt && inet_opt->opt.srr) | 479 | if (inet_opt && inet_opt->opt.srr) |
480 | daddr = inet_opt->opt.faddr; | 480 | daddr = inet_opt->opt.faddr; |
481 | 481 | ||
482 | rcu_read_unlock(); | ||
483 | |||
482 | /* If this fails, retransmit mechanism of transport layer will | 484 | /* If this fails, retransmit mechanism of transport layer will |
483 | * keep trying until route appears or the connection times | 485 | * keep trying until route appears or the connection times |
484 | * itself out. | 486 | * itself out. |