From 926caae6dab68183b93198f644c19cef2f1dc8eb Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Sun, 13 May 2018 13:12:43 +0200 Subject: socket: use skb_put_data --- src/compat/compat.h | 9 +++++++++ src/socket.c | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/compat/compat.h b/src/compat/compat.h index d65a538..650b06b 100644 --- a/src/compat/compat.h +++ b/src/compat/compat.h @@ -577,6 +577,15 @@ struct _____dummy_container { char dev; }; #define genl_dump_check_consistent(a, b) genl_dump_check_consistent(a, b, &genl_family) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0) && !defined(ISRHEL7) +static inline void *skb_put_data(struct sk_buff *skb, const void *data, unsigned int len) +{ + void *tmp = skb_put(skb, len); + memcpy(tmp, data, len); + return tmp; +} +#endif + /* https://lkml.org/lkml/2017/6/23/790 */ #if IS_ENABLED(CONFIG_NF_CONNTRACK) #include diff --git a/src/socket.c b/src/socket.c index 6c81cc6..663a462 100644 --- a/src/socket.c +++ b/src/socket.c @@ -181,11 +181,11 @@ int socket_send_buffer_to_peer(struct wireguard_peer *peer, void *buffer, size_t skb_reserve(skb, SKB_HEADER_LEN); skb_set_inner_network_header(skb, 0); - memcpy(skb_put(skb, len), buffer, len); + skb_put_data(skb, buffer, len); return socket_send_skb_to_peer(peer, skb, ds); } -int socket_send_buffer_as_reply_to_skb(struct wireguard_device *wg, struct sk_buff *in_skb, void *out_buffer, size_t len) +int socket_send_buffer_as_reply_to_skb(struct wireguard_device *wg, struct sk_buff *in_skb, void *buffer, size_t len) { int ret = 0; struct sk_buff *skb; @@ -202,7 +202,7 @@ int socket_send_buffer_as_reply_to_skb(struct wireguard_device *wg, struct sk_bu return -ENOMEM; skb_reserve(skb, SKB_HEADER_LEN); skb_set_inner_network_header(skb, 0); - memcpy(skb_put(skb, len), out_buffer, len); + skb_put_data(skb, buffer, len); if (endpoint.addr.sa_family == AF_INET) ret = send4(wg, skb, &endpoint, 0, NULL); -- cgit v1.2.3-59-g8ed1b