提交 60fe62e7 编写于 作者: A Andrea Bittau 提交者: David S. Miller

[DCCP]: sparse endianness annotations

This also fixes the layout of dccp_hdr short sequence numbers, problem
was not fatal now as we only support long (48 bits) sequence numbers.
Signed-off-by: NAndrea Bittau <a.bittau@cs.ucl.ac.uk>
Signed-off-by: NArnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 a193a4ab
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x * @dccph_seq - sequence number high or low order 24 bits, depends on dccph_x
*/ */
struct dccp_hdr { struct dccp_hdr {
__u16 dccph_sport, __be16 dccph_sport,
dccph_dport; dccph_dport;
__u8 dccph_doff; __u8 dccph_doff;
#if defined(__LITTLE_ENDIAN_BITFIELD) #if defined(__LITTLE_ENDIAN_BITFIELD)
...@@ -32,18 +32,18 @@ struct dccp_hdr { ...@@ -32,18 +32,18 @@ struct dccp_hdr {
#endif #endif
__u16 dccph_checksum; __u16 dccph_checksum;
#if defined(__LITTLE_ENDIAN_BITFIELD) #if defined(__LITTLE_ENDIAN_BITFIELD)
__u32 dccph_x:1, __u8 dccph_x:1,
dccph_type:4, dccph_type:4,
dccph_reserved:3, dccph_reserved:3;
dccph_seq:24;
#elif defined(__BIG_ENDIAN_BITFIELD) #elif defined(__BIG_ENDIAN_BITFIELD)
__u32 dccph_reserved:3, __u8 dccph_reserved:3,
dccph_type:4, dccph_type:4,
dccph_x:1, dccph_x:1;
dccph_seq:24;
#else #else
#error "Adjust your <asm/byteorder.h> defines" #error "Adjust your <asm/byteorder.h> defines"
#endif #endif
__u8 dccph_seq2;
__be16 dccph_seq;
}; };
/** /**
...@@ -52,7 +52,7 @@ struct dccp_hdr { ...@@ -52,7 +52,7 @@ struct dccp_hdr {
* @dccph_seq_low - low 24 bits of a 48 bit seq packet * @dccph_seq_low - low 24 bits of a 48 bit seq packet
*/ */
struct dccp_hdr_ext { struct dccp_hdr_ext {
__u32 dccph_seq_low; __be32 dccph_seq_low;
}; };
/** /**
...@@ -62,7 +62,7 @@ struct dccp_hdr_ext { ...@@ -62,7 +62,7 @@ struct dccp_hdr_ext {
* @dccph_req_options - list of options (must be a multiple of 32 bits * @dccph_req_options - list of options (must be a multiple of 32 bits
*/ */
struct dccp_hdr_request { struct dccp_hdr_request {
__u32 dccph_req_service; __be32 dccph_req_service;
}; };
/** /**
* struct dccp_hdr_ack_bits - acknowledgment bits common to most packets * struct dccp_hdr_ack_bits - acknowledgment bits common to most packets
...@@ -71,9 +71,9 @@ struct dccp_hdr_request { ...@@ -71,9 +71,9 @@ struct dccp_hdr_request {
* @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR * @dccph_resp_ack_nr_low - 48 bit ack number low order bits, contains GSR
*/ */
struct dccp_hdr_ack_bits { struct dccp_hdr_ack_bits {
__u32 dccph_reserved1:8, __be16 dccph_reserved1;
dccph_ack_nr_high:24; __be16 dccph_ack_nr_high;
__u32 dccph_ack_nr_low; __be32 dccph_ack_nr_low;
}; };
/** /**
* struct dccp_hdr_response - Conection initiation response header * struct dccp_hdr_response - Conection initiation response header
...@@ -85,7 +85,7 @@ struct dccp_hdr_ack_bits { ...@@ -85,7 +85,7 @@ struct dccp_hdr_ack_bits {
*/ */
struct dccp_hdr_response { struct dccp_hdr_response {
struct dccp_hdr_ack_bits dccph_resp_ack; struct dccp_hdr_ack_bits dccph_resp_ack;
__u32 dccph_resp_service; __be32 dccph_resp_service;
}; };
/** /**
...@@ -269,16 +269,12 @@ static inline unsigned int dccp_basic_hdr_len(const struct sk_buff *skb) ...@@ -269,16 +269,12 @@ static inline unsigned int dccp_basic_hdr_len(const struct sk_buff *skb)
static inline __u64 dccp_hdr_seq(const struct sk_buff *skb) static inline __u64 dccp_hdr_seq(const struct sk_buff *skb)
{ {
const struct dccp_hdr *dh = dccp_hdr(skb); const struct dccp_hdr *dh = dccp_hdr(skb);
#if defined(__LITTLE_ENDIAN_BITFIELD) __u64 seq_nr = ntohs(dh->dccph_seq);
__u64 seq_nr = ntohl(dh->dccph_seq << 8);
#elif defined(__BIG_ENDIAN_BITFIELD)
__u64 seq_nr = ntohl(dh->dccph_seq);
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
if (dh->dccph_x != 0) if (dh->dccph_x != 0)
seq_nr = (seq_nr << 32) + ntohl(dccp_hdrx(skb)->dccph_seq_low); seq_nr = (seq_nr << 32) + ntohl(dccp_hdrx(skb)->dccph_seq_low);
else
seq_nr += (u32)dh->dccph_seq2 << 16;
return seq_nr; return seq_nr;
} }
...@@ -296,13 +292,7 @@ static inline struct dccp_hdr_ack_bits *dccp_hdr_ack_bits(const struct sk_buff * ...@@ -296,13 +292,7 @@ static inline struct dccp_hdr_ack_bits *dccp_hdr_ack_bits(const struct sk_buff *
static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb) static inline u64 dccp_hdr_ack_seq(const struct sk_buff *skb)
{ {
const struct dccp_hdr_ack_bits *dhack = dccp_hdr_ack_bits(skb); const struct dccp_hdr_ack_bits *dhack = dccp_hdr_ack_bits(skb);
#if defined(__LITTLE_ENDIAN_BITFIELD) return ((u64)ntohs(dhack->dccph_ack_nr_high) << 32) + ntohl(dhack->dccph_ack_nr_low);
return (((u64)ntohl(dhack->dccph_ack_nr_high << 8)) << 32) + ntohl(dhack->dccph_ack_nr_low);
#elif defined(__BIG_ENDIAN_BITFIELD)
return (((u64)ntohl(dhack->dccph_ack_nr_high)) << 32) + ntohl(dhack->dccph_ack_nr_low);
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
} }
static inline struct dccp_hdr_response *dccp_hdr_response(struct sk_buff *skb) static inline struct dccp_hdr_response *dccp_hdr_response(struct sk_buff *skb)
...@@ -387,7 +377,7 @@ struct dccp_request_sock { ...@@ -387,7 +377,7 @@ struct dccp_request_sock {
struct inet_request_sock dreq_inet_rsk; struct inet_request_sock dreq_inet_rsk;
__u64 dreq_iss; __u64 dreq_iss;
__u64 dreq_isr; __u64 dreq_isr;
__u32 dreq_service; __be32 dreq_service;
}; };
static inline struct dccp_request_sock *dccp_rsk(const struct request_sock *req) static inline struct dccp_request_sock *dccp_rsk(const struct request_sock *req)
...@@ -415,13 +405,13 @@ enum dccp_role { ...@@ -415,13 +405,13 @@ enum dccp_role {
struct dccp_service_list { struct dccp_service_list {
__u32 dccpsl_nr; __u32 dccpsl_nr;
__u32 dccpsl_list[0]; __be32 dccpsl_list[0];
}; };
#define DCCP_SERVICE_INVALID_VALUE htonl((__u32)-1) #define DCCP_SERVICE_INVALID_VALUE htonl((__u32)-1)
static inline int dccp_list_has_service(const struct dccp_service_list *sl, static inline int dccp_list_has_service(const struct dccp_service_list *sl,
const u32 service) const __be32 service)
{ {
if (likely(sl != NULL)) { if (likely(sl != NULL)) {
u32 i = sl->dccpsl_nr; u32 i = sl->dccpsl_nr;
...@@ -467,7 +457,7 @@ struct dccp_sock { ...@@ -467,7 +457,7 @@ struct dccp_sock {
__u64 dccps_gss; __u64 dccps_gss;
__u64 dccps_gsr; __u64 dccps_gsr;
__u64 dccps_gar; __u64 dccps_gar;
__u32 dccps_service; __be32 dccps_service;
struct dccp_service_list *dccps_service_list; struct dccp_service_list *dccps_service_list;
struct timeval dccps_timestamp_time; struct timeval dccps_timestamp_time;
__u32 dccps_timestamp_echo; __u32 dccps_timestamp_echo;
......
...@@ -615,7 +615,7 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option, ...@@ -615,7 +615,7 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
__FUNCTION__, dccp_role(sk), sk); __FUNCTION__, dccp_role(sk), sk);
rc = -EINVAL; rc = -EINVAL;
} else { } else {
opt_recv->ccid3or_loss_event_rate = ntohl(*(u32 *)value); opt_recv->ccid3or_loss_event_rate = ntohl(*(__be32 *)value);
ccid3_pr_debug("%s, sk=%p, LOSS_EVENT_RATE=%u\n", ccid3_pr_debug("%s, sk=%p, LOSS_EVENT_RATE=%u\n",
dccp_role(sk), sk, dccp_role(sk), sk,
opt_recv->ccid3or_loss_event_rate); opt_recv->ccid3or_loss_event_rate);
...@@ -636,7 +636,7 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option, ...@@ -636,7 +636,7 @@ static int ccid3_hc_tx_parse_options(struct sock *sk, unsigned char option,
__FUNCTION__, dccp_role(sk), sk); __FUNCTION__, dccp_role(sk), sk);
rc = -EINVAL; rc = -EINVAL;
} else { } else {
opt_recv->ccid3or_receive_rate = ntohl(*(u32 *)value); opt_recv->ccid3or_receive_rate = ntohl(*(__be32 *)value);
ccid3_pr_debug("%s, sk=%p, RECEIVE_RATE=%u\n", ccid3_pr_debug("%s, sk=%p, RECEIVE_RATE=%u\n",
dccp_role(sk), sk, dccp_role(sk), sk,
opt_recv->ccid3or_receive_rate); opt_recv->ccid3or_receive_rate);
...@@ -777,7 +777,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk) ...@@ -777,7 +777,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
static void ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb) static void ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb)
{ {
const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk); const struct ccid3_hc_rx_sock *hcrx = ccid3_hc_rx_sk(sk);
u32 x_recv, pinv; __be32 x_recv, pinv;
BUG_ON(hcrx == NULL); BUG_ON(hcrx == NULL);
......
...@@ -262,7 +262,7 @@ extern int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, ...@@ -262,7 +262,7 @@ extern int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr,
int addr_len); int addr_len);
extern int dccp_v4_checksum(const struct sk_buff *skb, extern int dccp_v4_checksum(const struct sk_buff *skb,
const u32 saddr, const u32 daddr); const __be32 saddr, const __be32 daddr);
extern int dccp_v4_send_reset(struct sock *sk, extern int dccp_v4_send_reset(struct sock *sk,
enum dccp_reset_codes code); enum dccp_reset_codes code);
...@@ -270,7 +270,7 @@ extern void dccp_send_close(struct sock *sk, const int active); ...@@ -270,7 +270,7 @@ extern void dccp_send_close(struct sock *sk, const int active);
extern int dccp_invalid_packet(struct sk_buff *skb); extern int dccp_invalid_packet(struct sk_buff *skb);
static inline int dccp_bad_service_code(const struct sock *sk, static inline int dccp_bad_service_code(const struct sock *sk,
const __u32 service) const __be32 service)
{ {
const struct dccp_sock *dp = dccp_sk(sk); const struct dccp_sock *dp = dccp_sk(sk);
...@@ -334,27 +334,16 @@ static inline void dccp_hdr_set_seq(struct dccp_hdr *dh, const u64 gss) ...@@ -334,27 +334,16 @@ static inline void dccp_hdr_set_seq(struct dccp_hdr *dh, const u64 gss)
{ {
struct dccp_hdr_ext *dhx = (struct dccp_hdr_ext *)((void *)dh + struct dccp_hdr_ext *dhx = (struct dccp_hdr_ext *)((void *)dh +
sizeof(*dh)); sizeof(*dh));
dh->dccph_seq2 = 0;
#if defined(__LITTLE_ENDIAN_BITFIELD) dh->dccph_seq = htons((gss >> 32) & 0xfffff);
dh->dccph_seq = htonl((gss >> 32)) >> 8;
#elif defined(__BIG_ENDIAN_BITFIELD)
dh->dccph_seq = htonl((gss >> 32));
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
dhx->dccph_seq_low = htonl(gss & 0xffffffff); dhx->dccph_seq_low = htonl(gss & 0xffffffff);
} }
static inline void dccp_hdr_set_ack(struct dccp_hdr_ack_bits *dhack, static inline void dccp_hdr_set_ack(struct dccp_hdr_ack_bits *dhack,
const u64 gsr) const u64 gsr)
{ {
#if defined(__LITTLE_ENDIAN_BITFIELD) dhack->dccph_reserved1 = 0;
dhack->dccph_ack_nr_high = htonl((gsr >> 32)) >> 8; dhack->dccph_ack_nr_high = htons(gsr >> 32);
#elif defined(__BIG_ENDIAN_BITFIELD)
dhack->dccph_ack_nr_high = htonl((gsr >> 32));
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
dhack->dccph_ack_nr_low = htonl(gsr & 0xffffffff); dhack->dccph_ack_nr_low = htonl(gsr & 0xffffffff);
} }
......
...@@ -498,9 +498,9 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) ...@@ -498,9 +498,9 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
struct dccp_sock dp; struct dccp_sock dp;
struct request_sock *req; struct request_sock *req;
struct dccp_request_sock *dreq; struct dccp_request_sock *dreq;
const __u32 saddr = skb->nh.iph->saddr; const __be32 saddr = skb->nh.iph->saddr;
const __u32 daddr = skb->nh.iph->daddr; const __be32 daddr = skb->nh.iph->daddr;
const __u32 service = dccp_hdr_request(skb)->dccph_req_service; const __be32 service = dccp_hdr_request(skb)->dccph_req_service;
struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
__u8 reset_code = DCCP_RESET_CODE_TOO_BUSY; __u8 reset_code = DCCP_RESET_CODE_TOO_BUSY;
...@@ -662,8 +662,8 @@ static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) ...@@ -662,8 +662,8 @@ static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb)
return sk; return sk;
} }
int dccp_v4_checksum(const struct sk_buff *skb, const u32 saddr, int dccp_v4_checksum(const struct sk_buff *skb, const __be32 saddr,
const u32 daddr) const __be32 daddr)
{ {
const struct dccp_hdr* dh = dccp_hdr(skb); const struct dccp_hdr* dh = dccp_hdr(skb);
int checksum_len; int checksum_len;
...@@ -683,7 +683,7 @@ int dccp_v4_checksum(const struct sk_buff *skb, const u32 saddr, ...@@ -683,7 +683,7 @@ int dccp_v4_checksum(const struct sk_buff *skb, const u32 saddr,
} }
static int dccp_v4_verify_checksum(struct sk_buff *skb, static int dccp_v4_verify_checksum(struct sk_buff *skb,
const u32 saddr, const u32 daddr) const __be32 saddr, const __be32 daddr)
{ {
struct dccp_hdr *dh = dccp_hdr(skb); struct dccp_hdr *dh = dccp_hdr(skb);
int checksum_len; int checksum_len;
......
...@@ -264,7 +264,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr, ...@@ -264,7 +264,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
} }
static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
int type, int code, int offset, __u32 info) int type, int code, int offset, __be32 info)
{ {
struct ipv6hdr *hdr = (struct ipv6hdr *)skb->data; struct ipv6hdr *hdr = (struct ipv6hdr *)skb->data;
const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset); const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset);
...@@ -678,7 +678,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) ...@@ -678,7 +678,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
struct dccp_request_sock *dreq; struct dccp_request_sock *dreq;
struct inet6_request_sock *ireq6; struct inet6_request_sock *ireq6;
struct ipv6_pinfo *np = inet6_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk);
const __u32 service = dccp_hdr_request(skb)->dccph_req_service; const __be32 service = dccp_hdr_request(skb)->dccph_req_service;
struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);
__u8 reset_code = DCCP_RESET_CODE_TOO_BUSY; __u8 reset_code = DCCP_RESET_CODE_TOO_BUSY;
......
...@@ -155,7 +155,7 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb) ...@@ -155,7 +155,7 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb)
if (len != 4) if (len != 4)
goto out_invalid_option; goto out_invalid_option;
opt_recv->dccpor_timestamp = ntohl(*(u32 *)value); opt_recv->dccpor_timestamp = ntohl(*(__be32 *)value);
dp->dccps_timestamp_echo = opt_recv->dccpor_timestamp; dp->dccps_timestamp_echo = opt_recv->dccpor_timestamp;
dccp_timestamp(sk, &dp->dccps_timestamp_time); dccp_timestamp(sk, &dp->dccps_timestamp_time);
...@@ -169,7 +169,7 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb) ...@@ -169,7 +169,7 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb)
if (len != 4 && len != 6 && len != 8) if (len != 4 && len != 6 && len != 8)
goto out_invalid_option; goto out_invalid_option;
opt_recv->dccpor_timestamp_echo = ntohl(*(u32 *)value); opt_recv->dccpor_timestamp_echo = ntohl(*(__be32 *)value);
dccp_pr_debug("%sTIMESTAMP_ECHO=%u, len=%d, ackno=%llu, ", dccp_pr_debug("%sTIMESTAMP_ECHO=%u, len=%d, ackno=%llu, ",
debug_prefix, debug_prefix,
...@@ -183,9 +183,9 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb) ...@@ -183,9 +183,9 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb)
break; break;
if (len == 6) if (len == 6)
elapsed_time = ntohs(*(u16 *)(value + 4)); elapsed_time = ntohs(*(__be16 *)(value + 4));
else else
elapsed_time = ntohl(*(u32 *)(value + 4)); elapsed_time = ntohl(*(__be32 *)(value + 4));
/* Give precedence to the biggest ELAPSED_TIME */ /* Give precedence to the biggest ELAPSED_TIME */
if (elapsed_time > opt_recv->dccpor_elapsed_time) if (elapsed_time > opt_recv->dccpor_elapsed_time)
...@@ -199,9 +199,9 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb) ...@@ -199,9 +199,9 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb)
continue; continue;
if (len == 2) if (len == 2)
elapsed_time = ntohs(*(u16 *)value); elapsed_time = ntohs(*(__be16 *)value);
else else
elapsed_time = ntohl(*(u32 *)value); elapsed_time = ntohl(*(__be32 *)value);
if (elapsed_time > opt_recv->dccpor_elapsed_time) if (elapsed_time > opt_recv->dccpor_elapsed_time)
opt_recv->dccpor_elapsed_time = elapsed_time; opt_recv->dccpor_elapsed_time = elapsed_time;
...@@ -358,10 +358,10 @@ void dccp_insert_option_elapsed_time(struct sock *sk, ...@@ -358,10 +358,10 @@ void dccp_insert_option_elapsed_time(struct sock *sk,
*to++ = len; *to++ = len;
if (elapsed_time_len == 2) { if (elapsed_time_len == 2) {
const u16 var16 = htons((u16)elapsed_time); const __be16 var16 = htons((u16)elapsed_time);
memcpy(to, &var16, 2); memcpy(to, &var16, 2);
} else { } else {
const u32 var32 = htonl(elapsed_time); const __be32 var32 = htonl(elapsed_time);
memcpy(to, &var32, 4); memcpy(to, &var32, 4);
} }
...@@ -392,14 +392,13 @@ EXPORT_SYMBOL_GPL(dccp_timestamp); ...@@ -392,14 +392,13 @@ EXPORT_SYMBOL_GPL(dccp_timestamp);
void dccp_insert_option_timestamp(struct sock *sk, struct sk_buff *skb) void dccp_insert_option_timestamp(struct sock *sk, struct sk_buff *skb)
{ {
struct timeval tv; struct timeval tv;
u32 now; __be32 now;
dccp_timestamp(sk, &tv); dccp_timestamp(sk, &tv);
now = timeval_usecs(&tv) / 10; now = htonl(timeval_usecs(&tv) / 10);
/* yes this will overflow but that is the point as we want a /* yes this will overflow but that is the point as we want a
* 10 usec 32 bit timer which mean it wraps every 11.9 hours */ * 10 usec 32 bit timer which mean it wraps every 11.9 hours */
now = htonl(now);
dccp_insert_option(sk, skb, DCCPO_TIMESTAMP, &now, sizeof(now)); dccp_insert_option(sk, skb, DCCPO_TIMESTAMP, &now, sizeof(now));
} }
...@@ -414,7 +413,7 @@ static void dccp_insert_option_timestamp_echo(struct sock *sk, ...@@ -414,7 +413,7 @@ static void dccp_insert_option_timestamp_echo(struct sock *sk,
"CLIENT TX opt: " : "server TX opt: "; "CLIENT TX opt: " : "server TX opt: ";
#endif #endif
struct timeval now; struct timeval now;
u32 tstamp_echo; __be32 tstamp_echo;
u32 elapsed_time; u32 elapsed_time;
int len, elapsed_time_len; int len, elapsed_time_len;
unsigned char *to; unsigned char *to;
...@@ -441,10 +440,10 @@ static void dccp_insert_option_timestamp_echo(struct sock *sk, ...@@ -441,10 +440,10 @@ static void dccp_insert_option_timestamp_echo(struct sock *sk,
to += 4; to += 4;
if (elapsed_time_len == 2) { if (elapsed_time_len == 2) {
const u16 var16 = htons((u16)elapsed_time); const __be16 var16 = htons((u16)elapsed_time);
memcpy(to, &var16, 2); memcpy(to, &var16, 2);
} else if (elapsed_time_len == 4) { } else if (elapsed_time_len == 4) {
const u32 var32 = htonl(elapsed_time); const __be32 var32 = htonl(elapsed_time);
memcpy(to, &var32, 4); memcpy(to, &var32, 4);
} }
......
...@@ -221,7 +221,7 @@ int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg) ...@@ -221,7 +221,7 @@ int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg)
EXPORT_SYMBOL_GPL(dccp_ioctl); EXPORT_SYMBOL_GPL(dccp_ioctl);
static int dccp_setsockopt_service(struct sock *sk, const u32 service, static int dccp_setsockopt_service(struct sock *sk, const __be32 service,
char __user *optval, int optlen) char __user *optval, int optlen)
{ {
struct dccp_sock *dp = dccp_sk(sk); struct dccp_sock *dp = dccp_sk(sk);
...@@ -349,7 +349,7 @@ int dccp_setsockopt(struct sock *sk, int level, int optname, ...@@ -349,7 +349,7 @@ int dccp_setsockopt(struct sock *sk, int level, int optname,
EXPORT_SYMBOL_GPL(dccp_setsockopt); EXPORT_SYMBOL_GPL(dccp_setsockopt);
static int dccp_getsockopt_service(struct sock *sk, int len, static int dccp_getsockopt_service(struct sock *sk, int len,
u32 __user *optval, __be32 __user *optval,
int __user *optlen) int __user *optlen)
{ {
const struct dccp_sock *dp = dccp_sk(sk); const struct dccp_sock *dp = dccp_sk(sk);
...@@ -404,7 +404,7 @@ int dccp_getsockopt(struct sock *sk, int level, int optname, ...@@ -404,7 +404,7 @@ int dccp_getsockopt(struct sock *sk, int level, int optname,
break; break;
case DCCP_SOCKOPT_SERVICE: case DCCP_SOCKOPT_SERVICE:
return dccp_getsockopt_service(sk, len, return dccp_getsockopt_service(sk, len,
(u32 __user *)optval, optlen); (__be32 __user *)optval, optlen);
case 128 ... 191: case 128 ... 191:
return ccid_hc_rx_getsockopt(dp->dccps_hc_rx_ccid, sk, optname, return ccid_hc_rx_getsockopt(dp->dccps_hc_rx_ccid, sk, optname,
len, (u32 __user *)optval, optlen); len, (u32 __user *)optval, optlen);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册