summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-05-13 13:12:43 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-05-13 16:58:53 +0200
commit926caae6dab68183b93198f644c19cef2f1dc8eb (patch)
tree0a3e7d50954474baa33d4d54cbe156a2d3bf323e
parentwg-quick: preliminary support for go implementation (diff)
downloadwireguard-monolithic-historical-926caae6dab68183b93198f644c19cef2f1dc8eb.tar.xz
wireguard-monolithic-historical-926caae6dab68183b93198f644c19cef2f1dc8eb.zip
socket: use skb_put_data
-rw-r--r--src/compat/compat.h9
-rw-r--r--src/socket.c6
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 <linux/ip.h>
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);