Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 802885fc authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

dccp: constify dccp_make_response() socket argument



Like tcp_make_synack() the only time we might change the socket is
when calling sock_wmalloc(), which is using atomic operation to
update sk->sk_wmem_alloc

Also use MAX_DCCP_HEADER as both IPv4/IPv6 use this value for max_header.

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0f935dbe
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -293,7 +293,7 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized);
void dccp_destroy_sock(struct sock *sk);
void dccp_destroy_sock(struct sock *sk);


void dccp_close(struct sock *sk, long timeout);
void dccp_close(struct sock *sk, long timeout);
struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
struct sk_buff *dccp_make_response(const struct sock *sk, struct dst_entry *dst,
				   struct request_sock *req);
				   struct request_sock *req);


int dccp_connect(struct sock *sk);
int dccp_connect(struct sock *sk);
+11 −6
Original line number Original line Diff line number Diff line
@@ -390,7 +390,7 @@ int dccp_retransmit_skb(struct sock *sk)
	return dccp_transmit_skb(sk, skb_clone(sk->sk_send_head, GFP_ATOMIC));
	return dccp_transmit_skb(sk, skb_clone(sk->sk_send_head, GFP_ATOMIC));
}
}


struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
struct sk_buff *dccp_make_response(const struct sock *sk, struct dst_entry *dst,
				   struct request_sock *req)
				   struct request_sock *req)
{
{
	struct dccp_hdr *dh;
	struct dccp_hdr *dh;
@@ -398,13 +398,18 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
	const u32 dccp_header_size = sizeof(struct dccp_hdr) +
	const u32 dccp_header_size = sizeof(struct dccp_hdr) +
				     sizeof(struct dccp_hdr_ext) +
				     sizeof(struct dccp_hdr_ext) +
				     sizeof(struct dccp_hdr_response);
				     sizeof(struct dccp_hdr_response);
	struct sk_buff *skb = sock_wmalloc(sk, sk->sk_prot->max_header, 1,
	struct sk_buff *skb;

	/* sk is marked const to clearly express we dont hold socket lock.
	 * sock_wmalloc() will atomically change sk->sk_wmem_alloc,
	 * it is safe to promote sk to non const.
	 */
	skb = sock_wmalloc((struct sock *)sk, MAX_DCCP_HEADER, 1,
			   GFP_ATOMIC);
			   GFP_ATOMIC);
	if (skb == NULL)
	if (!skb)
		return NULL;
		return NULL;


	/* Reserve space for headers. */
	skb_reserve(skb, MAX_DCCP_HEADER);
	skb_reserve(skb, sk->sk_prot->max_header);


	skb_dst_set(skb, dst_clone(dst));
	skb_dst_set(skb, dst_clone(dst));