Loading net/qrtr/qrtr.c +13 −6 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2015, Sony Mobile Communications Inc. * Copyright (c) 2013, 2018 The Linux Foundation. All rights reserved. * Copyright (c) 2013, 2018-2019 The Linux Foundation. All rights reserved. */ #include <linux/module.h> #include <linux/netlink.h> Loading Loading @@ -248,12 +248,15 @@ static void qrtr_node_release(struct qrtr_node *node) */ static void qrtr_tx_resume(struct qrtr_node *node, struct sk_buff *skb) { struct qrtr_ctrl_pkt *pkt = (struct qrtr_ctrl_pkt *)skb->data; u64 remote_node = le32_to_cpu(pkt->client.node); u32 remote_port = le32_to_cpu(pkt->client.port); struct qrtr_ctrl_pkt pkt = {0,}; struct qrtr_tx_flow *flow; unsigned long key; u64 remote_node; u32 remote_port; skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); remote_node = le32_to_cpu(pkt.client.node); remote_port = le32_to_cpu(pkt.client.port); key = remote_node << 32 | remote_port; flow = radix_tree_lookup(&node->qrtr_tx_flow, key); Loading Loading @@ -471,14 +474,16 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) unsigned int size; unsigned int ver; size_t hdrlen; int errcode; if (len & 3) return -EINVAL; skb = netdev_alloc_skb(NULL, len); skb = alloc_skb_with_frags(sizeof(*v1), len, 0, &errcode, GFP_ATOMIC); if (!skb) return -ENOMEM; skb_reserve(skb, sizeof(*v1)); cb = (struct qrtr_cb *)skb->cb; /* Version field in v1 is little endian, so this works for both cases */ Loading Loading @@ -528,7 +533,9 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) cb->type != QRTR_TYPE_RESUME_TX) goto err; skb_put_data(skb, data + hdrlen, size); skb->data_len = size; skb->len = size; skb_store_bits(skb, 0, data + hdrlen, size); qrtr_node_assign(node, cb->src_node); Loading Loading
net/qrtr/qrtr.c +13 −6 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2015, Sony Mobile Communications Inc. * Copyright (c) 2013, 2018 The Linux Foundation. All rights reserved. * Copyright (c) 2013, 2018-2019 The Linux Foundation. All rights reserved. */ #include <linux/module.h> #include <linux/netlink.h> Loading Loading @@ -248,12 +248,15 @@ static void qrtr_node_release(struct qrtr_node *node) */ static void qrtr_tx_resume(struct qrtr_node *node, struct sk_buff *skb) { struct qrtr_ctrl_pkt *pkt = (struct qrtr_ctrl_pkt *)skb->data; u64 remote_node = le32_to_cpu(pkt->client.node); u32 remote_port = le32_to_cpu(pkt->client.port); struct qrtr_ctrl_pkt pkt = {0,}; struct qrtr_tx_flow *flow; unsigned long key; u64 remote_node; u32 remote_port; skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); remote_node = le32_to_cpu(pkt.client.node); remote_port = le32_to_cpu(pkt.client.port); key = remote_node << 32 | remote_port; flow = radix_tree_lookup(&node->qrtr_tx_flow, key); Loading Loading @@ -471,14 +474,16 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) unsigned int size; unsigned int ver; size_t hdrlen; int errcode; if (len & 3) return -EINVAL; skb = netdev_alloc_skb(NULL, len); skb = alloc_skb_with_frags(sizeof(*v1), len, 0, &errcode, GFP_ATOMIC); if (!skb) return -ENOMEM; skb_reserve(skb, sizeof(*v1)); cb = (struct qrtr_cb *)skb->cb; /* Version field in v1 is little endian, so this works for both cases */ Loading Loading @@ -528,7 +533,9 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) cb->type != QRTR_TYPE_RESUME_TX) goto err; skb_put_data(skb, data + hdrlen, size); skb->data_len = size; skb->len = size; skb_store_bits(skb, 0, data + hdrlen, size); qrtr_node_assign(node, cb->src_node); Loading