Commit 0979e465 authored by RongQing.Li's avatar RongQing.Li Committed by David S. Miller

dccp: remove unnecessary codes in ipv6.c

opt always equals np->opts, so it is meaningless to define opt, and
check if opt does not equal np->opts and then try to free opt.
Signed-off-by: default avatarRongQing.Li <roy.qing.li@gmail.com>
Acked-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 43264e0b
...@@ -239,7 +239,6 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req, ...@@ -239,7 +239,6 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
struct inet6_request_sock *ireq6 = inet6_rsk(req); struct inet6_request_sock *ireq6 = inet6_rsk(req);
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
struct sk_buff *skb; struct sk_buff *skb;
struct ipv6_txoptions *opt = NULL;
struct in6_addr *final_p, final; struct in6_addr *final_p, final;
struct flowi6 fl6; struct flowi6 fl6;
int err = -1; int err = -1;
...@@ -255,9 +254,8 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req, ...@@ -255,9 +254,8 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
fl6.fl6_sport = inet_rsk(req)->loc_port; fl6.fl6_sport = inet_rsk(req)->loc_port;
security_req_classify_flow(req, flowi6_to_flowi(&fl6)); security_req_classify_flow(req, flowi6_to_flowi(&fl6));
opt = np->opt;
final_p = fl6_update_dst(&fl6, opt, &final); final_p = fl6_update_dst(&fl6, np->opt, &final);
dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false); dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false);
if (IS_ERR(dst)) { if (IS_ERR(dst)) {
...@@ -274,13 +272,11 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req, ...@@ -274,13 +272,11 @@ static int dccp_v6_send_response(struct sock *sk, struct request_sock *req,
&ireq6->loc_addr, &ireq6->loc_addr,
&ireq6->rmt_addr); &ireq6->rmt_addr);
fl6.daddr = ireq6->rmt_addr; fl6.daddr = ireq6->rmt_addr;
err = ip6_xmit(sk, skb, &fl6, opt, np->tclass); err = ip6_xmit(sk, skb, &fl6, np->opt, np->tclass);
err = net_xmit_eval(err); err = net_xmit_eval(err);
} }
done: done:
if (opt != NULL && opt != np->opt)
sock_kfree_s(sk, opt, opt->tot_len);
dst_release(dst); dst_release(dst);
return err; return err;
} }
...@@ -475,7 +471,6 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk, ...@@ -475,7 +471,6 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
struct inet_sock *newinet; struct inet_sock *newinet;
struct dccp6_sock *newdp6; struct dccp6_sock *newdp6;
struct sock *newsk; struct sock *newsk;
struct ipv6_txoptions *opt;
if (skb->protocol == htons(ETH_P_IP)) { if (skb->protocol == htons(ETH_P_IP)) {
/* /*
...@@ -520,7 +515,6 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk, ...@@ -520,7 +515,6 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
return newsk; return newsk;
} }
opt = np->opt;
if (sk_acceptq_is_full(sk)) if (sk_acceptq_is_full(sk))
goto out_overflow; goto out_overflow;
...@@ -532,7 +526,7 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk, ...@@ -532,7 +526,7 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
memset(&fl6, 0, sizeof(fl6)); memset(&fl6, 0, sizeof(fl6));
fl6.flowi6_proto = IPPROTO_DCCP; fl6.flowi6_proto = IPPROTO_DCCP;
fl6.daddr = ireq6->rmt_addr; fl6.daddr = ireq6->rmt_addr;
final_p = fl6_update_dst(&fl6, opt, &final); final_p = fl6_update_dst(&fl6, np->opt, &final);
fl6.saddr = ireq6->loc_addr; fl6.saddr = ireq6->loc_addr;
fl6.flowi6_oif = sk->sk_bound_dev_if; fl6.flowi6_oif = sk->sk_bound_dev_if;
fl6.fl6_dport = inet_rsk(req)->rmt_port; fl6.fl6_dport = inet_rsk(req)->rmt_port;
...@@ -597,11 +591,8 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk, ...@@ -597,11 +591,8 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
* Yes, keeping reference count would be much more clever, but we make * Yes, keeping reference count would be much more clever, but we make
* one more one thing there: reattach optmem to newsk. * one more one thing there: reattach optmem to newsk.
*/ */
if (opt != NULL) { if (np->opt != NULL)
newnp->opt = ipv6_dup_options(newsk, opt); newnp->opt = ipv6_dup_options(newsk, np->opt);
if (opt != np->opt)
sock_kfree_s(sk, opt, opt->tot_len);
}
inet_csk(newsk)->icsk_ext_hdr_len = 0; inet_csk(newsk)->icsk_ext_hdr_len = 0;
if (newnp->opt != NULL) if (newnp->opt != NULL)
...@@ -627,8 +618,6 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk, ...@@ -627,8 +618,6 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
dst_release(dst); dst_release(dst);
out: out:
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS);
if (opt != NULL && opt != np->opt)
sock_kfree_s(sk, opt, opt->tot_len);
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment