Skip to content

Commit a224772

Browse files
edumazetdavem330
authored andcommitted
ipv6: add a struct inet6_skb_parm param to ipv6_opt_accepted()
ipv6_opt_accepted() assumes IP6CB(skb) holds the struct inet6_skb_parm that it needs. Lets not assume this, as TCP stack might use a different place. Signed-off-by: Eric Dumazet <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 24a2d43 commit a224772

File tree

5 files changed

+9
-7
lines changed

5 files changed

+9
-7
lines changed

include/net/ipv6.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ struct ipv6_txoptions *ipv6_renew_options(struct sock *sk,
288288
struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space,
289289
struct ipv6_txoptions *opt);
290290

291-
bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb);
291+
bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb,
292+
const struct inet6_skb_parm *opt);
292293

293294
static inline bool ipv6_accept_ra(struct inet6_dev *idev)
294295
{

net/dccp/ipv6.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
404404
ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr;
405405
ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
406406

407-
if (ipv6_opt_accepted(sk, skb) ||
407+
if (ipv6_opt_accepted(sk, skb, IP6CB(skb)) ||
408408
np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
409409
np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
410410
atomic_inc(&skb->users);

net/ipv6/af_inet6.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -672,10 +672,10 @@ int inet6_sk_rebuild_header(struct sock *sk)
672672
}
673673
EXPORT_SYMBOL_GPL(inet6_sk_rebuild_header);
674674

675-
bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb)
675+
bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb,
676+
const struct inet6_skb_parm *opt)
676677
{
677678
const struct ipv6_pinfo *np = inet6_sk(sk);
678-
const struct inet6_skb_parm *opt = IP6CB(skb);
679679

680680
if (np->rxopt.all) {
681681
if ((opt->hop && (np->rxopt.bits.hopopts ||

net/ipv6/syncookies.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
203203
ireq->ir_num = ntohs(th->dest);
204204
ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr;
205205
ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
206-
if (ipv6_opt_accepted(sk, skb) ||
206+
if (ipv6_opt_accepted(sk, skb, &TCP_SKB_CB(skb)->header.h6) ||
207207
np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo ||
208208
np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) {
209209
atomic_inc(&skb->users);

net/ipv6/tcp_ipv6.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,8 @@ static void tcp_v6_init_req(struct request_sock *req, struct sock *sk,
742742
ireq->ir_iif = inet6_iif(skb);
743743

744744
if (!TCP_SKB_CB(skb)->tcp_tw_isn &&
745-
(ipv6_opt_accepted(sk, skb) || np->rxopt.bits.rxinfo ||
745+
(ipv6_opt_accepted(sk, skb, &TCP_SKB_CB(skb)->header.h6) ||
746+
np->rxopt.bits.rxinfo ||
746747
np->rxopt.bits.rxoinfo || np->rxopt.bits.rxhlim ||
747748
np->rxopt.bits.rxohlim || np->repflow)) {
748749
atomic_inc(&skb->users);
@@ -1367,7 +1368,7 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
13671368
np->rcv_flowinfo = ip6_flowinfo(ipv6_hdr(opt_skb));
13681369
if (np->repflow)
13691370
np->flow_label = ip6_flowlabel(ipv6_hdr(opt_skb));
1370-
if (ipv6_opt_accepted(sk, opt_skb)) {
1371+
if (ipv6_opt_accepted(sk, opt_skb, &TCP_SKB_CB(opt_skb)->header.h6)) {
13711372
skb_set_owner_r(opt_skb, sk);
13721373
opt_skb = xchg(&np->pktoptions, opt_skb);
13731374
} else {

0 commit comments

Comments
 (0)