diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2007-09-26 10:24:28 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:52:41 -0400 |
commit | 2e86908f7dfb71b67ca4739d9a6c678b83b01078 (patch) | |
tree | 34000d4935057601e86b448698ff5fa55910b852 | |
parent | 08831700cc65f85a497d6b32b1c83ca84d71de4a (diff) |
[CCID3]: Move NULL-protection into function
This moves several instances of testing against NULL into the function which is
used to de-reference the CCID-private data.
Committer note: Made the BUG_ON depend on having CONFIG_IP_DCCP_CCID3_DEBUG, as it
is too much to have this on production code. Also made sure that
the macro is used only after checking if sk_state is not LISTEN,
to make it equivalent to what we had before.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
-rw-r--r-- | net/dccp/ccids/ccid3.c | 35 | ||||
-rw-r--r-- | net/dccp/ccids/ccid3.h | 20 |
2 files changed, 24 insertions, 31 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index 0bb338be9dd7..a4099398bcc8 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
@@ -302,8 +302,6 @@ static int ccid3_hc_tx_send_packet(struct sock *sk, struct sk_buff *skb) | |||
302 | ktime_t now = ktime_get_real(); | 302 | ktime_t now = ktime_get_real(); |
303 | s64 delay; | 303 | s64 delay; |
304 | 304 | ||
305 | BUG_ON(hctx == NULL); | ||
306 | |||
307 | /* | 305 | /* |
308 | * This function is called only for Data and DataAck packets. Sending | 306 | * This function is called only for Data and DataAck packets. Sending |
309 | * zero-sized Data(Ack)s is theoretically possible, but for congestion | 307 | * zero-sized Data(Ack)s is theoretically possible, but for congestion |
@@ -383,8 +381,6 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, | |||
383 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 381 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); |
384 | struct dccp_tx_hist_entry *packet; | 382 | struct dccp_tx_hist_entry *packet; |
385 | 383 | ||
386 | BUG_ON(hctx == NULL); | ||
387 | |||
388 | ccid3_hc_tx_update_s(hctx, len); | 384 | ccid3_hc_tx_update_s(hctx, len); |
389 | 385 | ||
390 | packet = dccp_tx_hist_entry_new(ccid3_tx_hist, GFP_ATOMIC); | 386 | packet = dccp_tx_hist_entry_new(ccid3_tx_hist, GFP_ATOMIC); |
@@ -409,8 +405,6 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
409 | unsigned long t_nfb; | 405 | unsigned long t_nfb; |
410 | u32 pinv, r_sample; | 406 | u32 pinv, r_sample; |
411 | 407 | ||
412 | BUG_ON(hctx == NULL); | ||
413 | |||
414 | /* we are only interested in ACKs */ | 408 | /* we are only interested in ACKs */ |
415 | if (!(DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_ACK || | 409 | if (!(DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_ACK || |
416 | DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_DATAACK)) | 410 | DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_DATAACK)) |
@@ -551,8 +545,6 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option, | |||
551 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 545 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); |
552 | struct ccid3_options_received *opt_recv; | 546 | struct ccid3_options_received *opt_recv; |
553 | 547 | ||
554 | BUG_ON(hctx == NULL); | ||
555 | |||
556 | opt_recv = &hctx->ccid3hctx_options_received; | 548 | opt_recv = &hctx->ccid3hctx_options_received; |
557 | 549 | ||
558 | if (opt_recv->ccid3or_seqno != dp->dccps_gsr) { | 550 | if (opt_recv->ccid3or_seqno != dp->dccps_gsr) { |
@@ -626,8 +618,6 @@ static void ccid3_hc_tx_exit(struct sock *sk) | |||
626 | { | 618 | { |
627 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 619 | struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); |
628 | 620 | ||
629 | BUG_ON(hctx == NULL); | ||
630 | |||
631 | ccid3_hc_tx_set_state(sk, TFRC_SSTATE_TERM); | 621 | ccid3_hc_tx_set_state(sk, TFRC_SSTATE_TERM); |
632 | sk_stop_timer(sk, &hctx->ccid3hctx_no_feedback_timer); | 622 | sk_stop_timer(sk, &hctx->ccid3hctx_no_feedback_timer); |
633 | 623 | ||
@@ -637,14 +627,13 @@ static void ccid3_hc_tx_exit(struct sock *sk) | |||
637 | 627 | ||
638 | static void ccid3_hc_tx_get_info(struct sock *sk, struct tcp_info *info) | 628 | static void ccid3_hc_tx_get_info(struct sock *sk, struct tcp_info *info) |
639 | { | 629 | { |
640 | const struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 630 | struct ccid3_hc_tx_sock *hctx; |
641 | 631 | ||
642 | /* Listen socks doesn't have a private CCID block */ | 632 | /* Listen socks doesn't have a private CCID block */ |
643 | if (sk->sk_state == DCCP_LISTEN) | 633 | if (sk->sk_state == DCCP_LISTEN) |
644 | return; | 634 | return; |
645 | 635 | ||
646 | BUG_ON(hctx == NULL); | 636 | hctx = ccid3_hc_tx_sk(sk); |
647 | |||
648 | info->tcpi_rto = hctx->ccid3hctx_t_rto; | 637 | info->tcpi_rto = hctx->ccid3hctx_t_rto; |
649 | info->tcpi_rtt = hctx->ccid3hctx_rtt; | 638 | info->tcpi_rtt = hctx->ccid3hctx_rtt; |
650 | } | 639 | } |
@@ -652,13 +641,14 @@ static void ccid3_hc_tx_get_info(struct sock *sk, struct tcp_info *info) | |||
652 | static int ccid3_hc_tx_getsockopt(struct sock *sk, const int optname, int len, | 641 | static int ccid3_hc_tx_getsockopt(struct sock *sk, const int optname, int len, |
653 | u32 __user *optval, int __user *optlen) | 642 | u32 __user *optval, int __user *optlen) |
654 | { | 643 | { |
655 | const struct ccid3_hc_tx_sock *hctx = ccid3_hc_tx_sk(sk); | 644 | const struct ccid3_hc_tx_sock *hctx; |
656 | const void *val; | 645 | const void *val; |
657 | 646 | ||
658 | /* Listen socks doesn't have a private CCID block */ | 647 | /* Listen socks doesn't have a private CCID block */ |
659 | if (sk->sk_state == DCCP_LISTEN) | 648 | if (sk->sk_state == DCCP_LISTEN) |
660 | return -EINVAL; | 649 | return -EINVAL; |
661 | 650 | ||
651 | hctx = ccid3_hc_tx_sk(sk); | ||
662 | switch (optname) { | 652 | switch (optname) { |
663 | case DCCP_SOCKOPT_CCID_TX_INFO: | 653 | case DCCP_SOCKOPT_CCID_TX_INFO: |
664 | if (len < sizeof(hctx->ccid3hctx_tfrc)) | 654 | if (len < sizeof(hctx->ccid3hctx_tfrc)) |
@@ -772,14 +762,13 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk) | |||
772 | 762 | ||
773 | static int ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb) | 763 | static int ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb) |
774 | { | 764 | { |
775 | const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); | 765 | const struct ccid3_hc_rx_sock *hcrx; |
776 | __be32 x_recv, pinv; | 766 | __be32 x_recv, pinv; |
777 | 767 | ||
778 | BUG_ON(hcrx == NULL); | ||
779 | |||
780 | if (!(sk->sk_state == DCCP_OPEN || sk->sk_state == DCCP_PARTOPEN)) | 768 | if (!(sk->sk_state == DCCP_OPEN || sk->sk_state == DCCP_PARTOPEN)) |
781 | return 0; | 769 | return 0; |
782 | 770 | ||
771 | hcrx = ccid3_hc_rx_sk(sk); | ||
783 | DCCP_SKB_CB(skb)->dccpd_ccval = hcrx->ccid3hcrx_ccval_last_counter; | 772 | DCCP_SKB_CB(skb)->dccpd_ccval = hcrx->ccid3hcrx_ccval_last_counter; |
784 | 773 | ||
785 | if (dccp_packet_without_ack(skb)) | 774 | if (dccp_packet_without_ack(skb)) |
@@ -870,8 +859,6 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
870 | int loss, payload_size; | 859 | int loss, payload_size; |
871 | ktime_t now; | 860 | ktime_t now; |
872 | 861 | ||
873 | BUG_ON(hcrx == NULL); | ||
874 | |||
875 | opt_recv = &dccp_sk(sk)->dccps_options_received; | 862 | opt_recv = &dccp_sk(sk)->dccps_options_received; |
876 | 863 | ||
877 | switch (DCCP_SKB_CB(skb)->dccpd_type) { | 864 | switch (DCCP_SKB_CB(skb)->dccpd_type) { |
@@ -985,8 +972,6 @@ static void ccid3_hc_rx_exit(struct sock *sk) | |||
985 | { | 972 | { |
986 | struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); | 973 | struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); |
987 | 974 | ||
988 | BUG_ON(hcrx == NULL); | ||
989 | |||
990 | ccid3_hc_rx_set_state(sk, TFRC_RSTATE_TERM); | 975 | ccid3_hc_rx_set_state(sk, TFRC_RSTATE_TERM); |
991 | 976 | ||
992 | /* Empty packet history */ | 977 | /* Empty packet history */ |
@@ -998,14 +983,13 @@ static void ccid3_hc_rx_exit(struct sock *sk) | |||
998 | 983 | ||
999 | static void ccid3_hc_rx_get_info(struct sock *sk, struct tcp_info *info) | 984 | static void ccid3_hc_rx_get_info(struct sock *sk, struct tcp_info *info) |
1000 | { | 985 | { |
1001 | const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); | 986 | const struct ccid3_hc_rx_sock *hcrx; |
1002 | 987 | ||
1003 | /* Listen socks doesn't have a private CCID block */ | 988 | /* Listen socks doesn't have a private CCID block */ |
1004 | if (sk->sk_state == DCCP_LISTEN) | 989 | if (sk->sk_state == DCCP_LISTEN) |
1005 | return; | 990 | return; |
1006 | 991 | ||
1007 | BUG_ON(hcrx == NULL); | 992 | hcrx = ccid3_hc_rx_sk(sk); |
1008 | |||
1009 | info->tcpi_ca_state = hcrx->ccid3hcrx_state; | 993 | info->tcpi_ca_state = hcrx->ccid3hcrx_state; |
1010 | info->tcpi_options |= TCPI_OPT_TIMESTAMPS; | 994 | info->tcpi_options |= TCPI_OPT_TIMESTAMPS; |
1011 | info->tcpi_rcv_rtt = hcrx->ccid3hcrx_rtt; | 995 | info->tcpi_rcv_rtt = hcrx->ccid3hcrx_rtt; |
@@ -1014,13 +998,14 @@ static void ccid3_hc_rx_get_info(struct sock *sk, struct tcp_info *info) | |||
1014 | static int ccid3_hc_rx_getsockopt(struct sock *sk, const int optname, int len, | 998 | static int ccid3_hc_rx_getsockopt(struct sock *sk, const int optname, int len, |
1015 | u32 __user *optval, int __user *optlen) | 999 | u32 __user *optval, int __user *optlen) |
1016 | { | 1000 | { |
1017 | const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); | 1001 | const struct ccid3_hc_rx_sock *hcrx; |
1018 | const void *val; | 1002 | const void *val; |
1019 | 1003 | ||
1020 | /* Listen socks doesn't have a private CCID block */ | 1004 | /* Listen socks doesn't have a private CCID block */ |
1021 | if (sk->sk_state == DCCP_LISTEN) | 1005 | if (sk->sk_state == DCCP_LISTEN) |
1022 | return -EINVAL; | 1006 | return -EINVAL; |
1023 | 1007 | ||
1008 | hcrx = ccid3_hc_rx_sk(sk); | ||
1024 | switch (optname) { | 1009 | switch (optname) { |
1025 | case DCCP_SOCKOPT_CCID_RX_INFO: | 1010 | case DCCP_SOCKOPT_CCID_RX_INFO: |
1026 | if (len < sizeof(hcrx->ccid3hcrx_tfrc)) | 1011 | if (len < sizeof(hcrx->ccid3hcrx_tfrc)) |
diff --git a/net/dccp/ccids/ccid3.h b/net/dccp/ccids/ccid3.h index 7cbf2b1329d9..ae99ec430371 100644 --- a/net/dccp/ccids/ccid3.h +++ b/net/dccp/ccids/ccid3.h | |||
@@ -117,6 +117,15 @@ struct ccid3_hc_tx_sock { | |||
117 | struct ccid3_options_received ccid3hctx_options_received; | 117 | struct ccid3_options_received ccid3hctx_options_received; |
118 | }; | 118 | }; |
119 | 119 | ||
120 | static inline struct ccid3_hc_tx_sock *ccid3_hc_tx_sk(const struct sock *sk) | ||
121 | { | ||
122 | struct ccid3_hc_tx_sock *hctx = ccid_priv(dccp_sk(sk)->dccps_hc_tx_ccid); | ||
123 | #ifdef CONFIG_IP_DCCP_CCID3_DEBUG | ||
124 | BUG_ON(hctx == NULL); | ||
125 | #endif | ||
126 | return hctx; | ||
127 | } | ||
128 | |||
120 | /* TFRC receiver states */ | 129 | /* TFRC receiver states */ |
121 | enum ccid3_hc_rx_states { | 130 | enum ccid3_hc_rx_states { |
122 | TFRC_RSTATE_NO_DATA = 1, | 131 | TFRC_RSTATE_NO_DATA = 1, |
@@ -161,14 +170,13 @@ struct ccid3_hc_rx_sock { | |||
161 | u32 ccid3hcrx_elapsed_time; | 170 | u32 ccid3hcrx_elapsed_time; |
162 | }; | 171 | }; |
163 | 172 | ||
164 | static inline struct ccid3_hc_tx_sock *ccid3_hc_tx_sk(const struct sock *sk) | ||
165 | { | ||
166 | return ccid_priv(dccp_sk(sk)->dccps_hc_tx_ccid); | ||
167 | } | ||
168 | |||
169 | static inline struct ccid3_hc_rx_sock *ccid3_hc_rx_sk(const struct sock *sk) | 173 | static inline struct ccid3_hc_rx_sock *ccid3_hc_rx_sk(const struct sock *sk) |
170 | { | 174 | { |
171 | return ccid_priv(dccp_sk(sk)->dccps_hc_rx_ccid); | 175 | struct ccid3_hc_rx_sock *hcrx = ccid_priv(dccp_sk(sk)->dccps_hc_rx_ccid); |
176 | #ifdef CONFIG_IP_DCCP_CCID3_DEBUG | ||
177 | BUG_ON(hcrx == NULL); | ||
178 | #endif | ||
179 | return hcrx; | ||
172 | } | 180 | } |
173 | 181 | ||
174 | #endif /* _DCCP_CCID3_H_ */ | 182 | #endif /* _DCCP_CCID3_H_ */ |