History

Merge v5.7-rc5 into driver-core-next

We want the driver core fixes in here and this resolves a merge issue with drivers/base/dd.c

Greg Kroah-Hartman committed 6 years ago

Commit c8be6af2 parents c78c31b 2ef96a5461 files · +4386 −2037Browse files

Showing the changes to include/linux (16 of 461 files). Show all

Unified · Split

16 files
  1. include/linux/amba/bus.h +1 −0
  2. include/linux/backing-dev-defs.h +1 −0
  3. include/linux/backing-dev.h +1 −8
  4. include/linux/dma-buf.h +1 −2
  5. include/linux/dmaengine.h +6 −6
  6. include/linux/fs.h +1 −1
  7. include/linux/lsm_hook_defs.h +1 −1
  8. include/linux/mhi.h +10 −6
  9. include/linux/nfs_xdr.h +2 −0
  10. include/linux/platform_data/cros_ec_sensorhub.h +1 −0
  11. include/linux/platform_device.h +1 −0
  12. include/linux/sunrpc/clnt.h +12 −1
  13. include/linux/tcp.h +0 −51
  14. include/linux/tty.h +1 −1
  15. include/linux/virtio_net.h +24 −2
  16. include/linux/virtio_vsock.h +1 −0
include/linux/amba/bus.h+1−0
@@ -65,6 +65,7 @@ struct amba_device { · 64 unmodified lines
65 struct device dev;65 struct device dev;
66 struct resource res;66 struct resource res;
67 struct clk *pclk;67 struct clk *pclk;
68 struct device_dma_parameters dma_parms;
68 unsigned int periphid;69 unsigned int periphid;
69 unsigned int cid;70 unsigned int cid;
70 struct amba_cs_uci_id uci;71 struct amba_cs_uci_id uci;
include/linux/backing-dev-defs.h+1−0
@@ -219,6 +219,7 @@ struct backing_dev_info { · 218 unmodified lines
219 wait_queue_head_t wb_waitq;219 wait_queue_head_t wb_waitq;
220 220
221 struct device *dev;221 struct device *dev;
222 char dev_name[64];
222 struct device *owner;223 struct device *owner;
223 224
224 struct timer_list laptop_mode_wb_timer;225 struct timer_list laptop_mode_wb_timer;
include/linux/backing-dev.h+1−8
@@ -505,13 +505,6 @@ static inline int bdi_rw_congested(struct backing_dev_info *bdi) · 504 unmodified lines
505 (1 << WB_async_congested));505 (1 << WB_async_congested));
506}506}
507 507
508extern const char *bdi_unknown_name;508const char *bdi_dev_name(struct backing_dev_info *bdi);
509
510static inline const char *bdi_dev_name(struct backing_dev_info *bdi)
511{
512 if (!bdi || !bdi->dev)
513 return bdi_unknown_name;
514 return dev_name(bdi->dev);
515}
516 509
517#endif /* _LINUX_BACKING_DEV_H */510#endif /* _LINUX_BACKING_DEV_H */
include/linux/dma-buf.h+1−2
@@ -329,13 +329,12 @@ struct dma_buf { · 328 unmodified lines
329 329
330/**330/**
331 * struct dma_buf_attach_ops - importer operations for an attachment331 * struct dma_buf_attach_ops - importer operations for an attachment
332 * @move_notify: [optional] notification that the DMA-buf is moving
333 *332 *
334 * Attachment operations implemented by the importer.333 * Attachment operations implemented by the importer.
335 */334 */
336struct dma_buf_attach_ops {335struct dma_buf_attach_ops {
337 /**336 /**
338 * @move_notify337 * @move_notify: [optional] notification that the DMA-buf is moving
339 *338 *
340 * If this callback is provided the framework can avoid pinning the339 * If this callback is provided the framework can avoid pinning the
341 * backing store while mappings exists.340 * backing store while mappings exists.
include/linux/dmaengine.h+6−6
@@ -83,9 +83,9 @@ enum dma_transfer_direction { · 82 unmodified lines
83/**83/**
84 * Interleaved Transfer Request84 * Interleaved Transfer Request
85 * ----------------------------85 * ----------------------------
86 * A chunk is collection of contiguous bytes to be transfered.86 * A chunk is collection of contiguous bytes to be transferred.
87 * The gap(in bytes) between two chunks is called inter-chunk-gap(ICG).87 * The gap(in bytes) between two chunks is called inter-chunk-gap(ICG).
88 * ICGs may or maynot change between chunks.88 * ICGs may or may not change between chunks.
89 * A FRAME is the smallest series of contiguous {chunk,icg} pairs,89 * A FRAME is the smallest series of contiguous {chunk,icg} pairs,
90 * that when repeated an integral number of times, specifies the transfer.90 * that when repeated an integral number of times, specifies the transfer.
91 * A transfer template is specification of a Frame, the number of times91 * A transfer template is specification of a Frame, the number of times
@@ -341,13 +341,11 @@ struct dma_chan { · 249 unmodified lines
341 * @chan: driver channel device341 * @chan: driver channel device
342 * @device: sysfs device342 * @device: sysfs device
343 * @dev_id: parent dma_device dev_id343 * @dev_id: parent dma_device dev_id
344 * @idr_ref: reference count to gate release of dma_device dev_id
345 */344 */
346struct dma_chan_dev {345struct dma_chan_dev {
347 struct dma_chan *chan;346 struct dma_chan *chan;
348 struct device device;347 struct device device;
349 int dev_id;348 int dev_id;
350 atomic_t *idr_ref;
351};349};
352 350
353/**351/**
@@ -835,6 +833,8 @@ struct dma_device { · 481 unmodified lines
835 int dev_id;833 int dev_id;
836 struct device *dev;834 struct device *dev;
837 struct module *owner;835 struct module *owner;
836 struct ida chan_ida;
837 struct mutex chan_mutex; /* to protect chan_ida */
838 838
839 u32 src_addr_widths;839 u32 src_addr_widths;
840 u32 dst_addr_widths;840 u32 dst_addr_widths;
@@ -1069,7 +1069,7 @@ static inline int dmaengine_terminate_all(struct dma_chan *chan) · 228 unmodified lines
1069 * dmaengine_synchronize() needs to be called before it is safe to free1069 * dmaengine_synchronize() needs to be called before it is safe to free
1070 * any memory that is accessed by previously submitted descriptors or before1070 * any memory that is accessed by previously submitted descriptors or before
1071 * freeing any resources accessed from within the completion callback of any1071 * freeing any resources accessed from within the completion callback of any
1072 * perviously submitted descriptors.1072 * previously submitted descriptors.
1073 *1073 *
1074 * This function can be called from atomic context as well as from within a1074 * This function can be called from atomic context as well as from within a
1075 * complete callback of a descriptor submitted on the same channel.1075 * complete callback of a descriptor submitted on the same channel.
@@ -1091,7 +1091,7 @@ static inline int dmaengine_terminate_async(struct dma_chan *chan) · 15 unmodified lines
1091 *1091 *
1092 * Synchronizes to the DMA channel termination to the current context. When this1092 * Synchronizes to the DMA channel termination to the current context. When this
1093 * function returns it is guaranteed that all transfers for previously issued1093 * function returns it is guaranteed that all transfers for previously issued
1094 * descriptors have stopped and and it is safe to free the memory assoicated1094 * descriptors have stopped and it is safe to free the memory associated
1095 * with them. Furthermore it is guaranteed that all complete callback functions1095 * with them. Furthermore it is guaranteed that all complete callback functions
1096 * for a previously submitted descriptor have finished running and it is safe to1096 * for a previously submitted descriptor have finished running and it is safe to
1097 * free resources accessed from within the complete callbacks.1097 * free resources accessed from within the complete callbacks.
include/linux/fs.h+1−1
@@ -983,7 +983,7 @@ struct file_handle { · 982 unmodified lines
983 __u32 handle_bytes;983 __u32 handle_bytes;
984 int handle_type;984 int handle_type;
985 /* file identifier */985 /* file identifier */
986 unsigned char f_handle[0];986 unsigned char f_handle[];
987};987};
988 988
989static inline struct file *get_file(struct file *f)989static inline struct file *get_file(struct file *f)
include/linux/lsm_hook_defs.h+1−1
@@ -55,7 +55,7 @@ LSM_HOOK(void, LSM_RET_VOID, bprm_committing_creds, struct linux_binprm *bprm) · 54 unmodified lines
55LSM_HOOK(void, LSM_RET_VOID, bprm_committed_creds, struct linux_binprm *bprm)55LSM_HOOK(void, LSM_RET_VOID, bprm_committed_creds, struct linux_binprm *bprm)
56LSM_HOOK(int, 0, fs_context_dup, struct fs_context *fc,56LSM_HOOK(int, 0, fs_context_dup, struct fs_context *fc,
57 struct fs_context *src_sc)57 struct fs_context *src_sc)
58LSM_HOOK(int, 0, fs_context_parse_param, struct fs_context *fc,58LSM_HOOK(int, -ENOPARAM, fs_context_parse_param, struct fs_context *fc,
59 struct fs_parameter *param)59 struct fs_parameter *param)
60LSM_HOOK(int, 0, sb_alloc_security, struct super_block *sb)60LSM_HOOK(int, 0, sb_alloc_security, struct super_block *sb)
61LSM_HOOK(void, LSM_RET_VOID, sb_free_security, struct super_block *sb)61LSM_HOOK(void, LSM_RET_VOID, sb_free_security, struct super_block *sb)
include/linux/mhi.h+10−6
@@ -53,9 +53,9 @@ enum mhi_callback { · 52 unmodified lines
53 * @MHI_CHAIN: Linked transfer53 * @MHI_CHAIN: Linked transfer
54 */54 */
55enum mhi_flags {55enum mhi_flags {
56 MHI_EOB,56 MHI_EOB = BIT(0),
57 MHI_EOT,57 MHI_EOT = BIT(1),
58 MHI_CHAIN,58 MHI_CHAIN = BIT(2),
59};59};
60 60
61/**61/**
@@ -335,14 +335,15 @@ struct mhi_controller_config { · 273 unmodified lines
335 * @syserr_worker: System error worker335 * @syserr_worker: System error worker
336 * @state_event: State change event336 * @state_event: State change event
337 * @status_cb: CB function to notify power states of the device (required)337 * @status_cb: CB function to notify power states of the device (required)
338 * @link_status: CB function to query link status of the device (required)
339 * @wake_get: CB function to assert device wake (optional)338 * @wake_get: CB function to assert device wake (optional)
340 * @wake_put: CB function to de-assert device wake (optional)339 * @wake_put: CB function to de-assert device wake (optional)
341 * @wake_toggle: CB function to assert and de-assert device wake (optional)340 * @wake_toggle: CB function to assert and de-assert device wake (optional)
342 * @runtime_get: CB function to controller runtime resume (required)341 * @runtime_get: CB function to controller runtime resume (required)
343 * @runtimet_put: CB function to decrement pm usage (required)342 * @runtime_put: CB function to decrement pm usage (required)
344 * @map_single: CB function to create TRE buffer343 * @map_single: CB function to create TRE buffer
345 * @unmap_single: CB function to destroy TRE buffer344 * @unmap_single: CB function to destroy TRE buffer
345 * @read_reg: Read a MHI register via the physical link (required)
346 * @write_reg: Write a MHI register via the physical link (required)
346 * @buffer_len: Bounce buffer length347 * @buffer_len: Bounce buffer length
347 * @bounce_buf: Use of bounce buffer348 * @bounce_buf: Use of bounce buffer
348 * @fbc_download: MHI host needs to do complete image transfer (optional)349 * @fbc_download: MHI host needs to do complete image transfer (optional)
@@ -417,7 +418,6 @@ struct mhi_controller { · 68 unmodified lines
417 418
418 void (*status_cb)(struct mhi_controller *mhi_cntrl,419 void (*status_cb)(struct mhi_controller *mhi_cntrl,
419 enum mhi_callback cb);420 enum mhi_callback cb);
420 int (*link_status)(struct mhi_controller *mhi_cntrl);
421 void (*wake_get)(struct mhi_controller *mhi_cntrl, bool override);421 void (*wake_get)(struct mhi_controller *mhi_cntrl, bool override);
422 void (*wake_put)(struct mhi_controller *mhi_cntrl, bool override);422 void (*wake_put)(struct mhi_controller *mhi_cntrl, bool override);
423 void (*wake_toggle)(struct mhi_controller *mhi_cntrl);423 void (*wake_toggle)(struct mhi_controller *mhi_cntrl);
@@ -427,6 +427,10 @@ struct mhi_controller { · 3 unmodified lines
427 struct mhi_buf_info *buf);427 struct mhi_buf_info *buf);
428 void (*unmap_single)(struct mhi_controller *mhi_cntrl,428 void (*unmap_single)(struct mhi_controller *mhi_cntrl,
429 struct mhi_buf_info *buf);429 struct mhi_buf_info *buf);
430 int (*read_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr,
431 u32 *out);
432 void (*write_reg)(struct mhi_controller *mhi_cntrl, void __iomem *addr,
433 u32 val);
430 434
431 size_t buffer_len;435 size_t buffer_len;
432 bool bounce_buf;436 bool bounce_buf;
include/linux/nfs_xdr.h+2−0
@@ -1317,11 +1317,13 @@ struct nfs41_impl_id { · 1316 unmodified lines
1317 struct nfstime4 date;1317 struct nfstime4 date;
1318};1318};
1319 1319
1320#define MAX_BIND_CONN_TO_SESSION_RETRIES 3
1320struct nfs41_bind_conn_to_session_args {1321struct nfs41_bind_conn_to_session_args {
1321 struct nfs_client *client;1322 struct nfs_client *client;
1322 struct nfs4_sessionid sessionid;1323 struct nfs4_sessionid sessionid;
1323 u32 dir;1324 u32 dir;
1324 bool use_conn_in_rdma_mode;1325 bool use_conn_in_rdma_mode;
1326 int retries;
1325};1327};
1326 1328
1327struct nfs41_bind_conn_to_session_res {1329struct nfs41_bind_conn_to_session_res {
include/linux/platform_data/cros_ec_sensorhub.h+1−0
@@ -185,6 +185,7 @@ int cros_ec_sensorhub_register_push_data(struct cros_ec_sensorhub *sensorhub, · 184 unmodified lines
185void cros_ec_sensorhub_unregister_push_data(struct cros_ec_sensorhub *sensorhub,185void cros_ec_sensorhub_unregister_push_data(struct cros_ec_sensorhub *sensorhub,
186 u8 sensor_num);186 u8 sensor_num);
187 187
188int cros_ec_sensorhub_ring_allocate(struct cros_ec_sensorhub *sensorhub);
188int cros_ec_sensorhub_ring_add(struct cros_ec_sensorhub *sensorhub);189int cros_ec_sensorhub_ring_add(struct cros_ec_sensorhub *sensorhub);
189void cros_ec_sensorhub_ring_remove(void *arg);190void cros_ec_sensorhub_ring_remove(void *arg);
190int cros_ec_sensorhub_ring_fifo_enable(struct cros_ec_sensorhub *sensorhub,191int cros_ec_sensorhub_ring_fifo_enable(struct cros_ec_sensorhub *sensorhub,
include/linux/platform_device.h+1−0
@@ -25,6 +25,7 @@ struct platform_device { · 24 unmodified lines
25 bool id_auto;25 bool id_auto;
26 struct device dev;26 struct device dev;
27 u64 platform_dma_mask;27 u64 platform_dma_mask;
28 struct device_dma_parameters dma_parms;
28 u32 num_resources;29 u32 num_resources;
29 struct resource *resource;30 struct resource *resource;
30 31
include/linux/sunrpc/clnt.h+12−1
@@ -71,7 +71,13 @@ struct rpc_clnt { · 70 unmodified lines
71#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)71#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
72 struct dentry *cl_debugfs; /* debugfs directory */72 struct dentry *cl_debugfs; /* debugfs directory */
73#endif73#endif
74 struct rpc_xprt_iter cl_xpi;74 /* cl_work is only needed after cl_xpi is no longer used,
75 * and that are of similar size
76 */
77 union {
78 struct rpc_xprt_iter cl_xpi;
79 struct work_struct cl_work;
80 };
75 const struct cred *cl_cred;81 const struct cred *cl_cred;
76};82};
77 83
@@ -236,4 +242,9 @@ static inline int rpc_reply_expected(struct rpc_task *task) · 158 unmodified lines
236 (task->tk_msg.rpc_proc->p_decode != NULL);242 (task->tk_msg.rpc_proc->p_decode != NULL);
237}243}
238 244
245static inline void rpc_task_close_connection(struct rpc_task *task)
246{
247 if (task->tk_xprt)
248 xprt_force_disconnect(task->tk_xprt);
249}
239#endif /* _LINUX_SUNRPC_CLNT_H */250#endif /* _LINUX_SUNRPC_CLNT_H */
include/linux/tcp.h+0−51
@@ -78,47 +78,6 @@ struct tcp_sack_block { · 77 unmodified lines
78#define TCP_SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */78#define TCP_SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
79#define TCP_DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/79#define TCP_DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/
80 80
81#if IS_ENABLED(CONFIG_MPTCP)
82struct mptcp_options_received {
83 u64 sndr_key;
84 u64 rcvr_key;
85 u64 data_ack;
86 u64 data_seq;
87 u32 subflow_seq;
88 u16 data_len;
89 u16 mp_capable : 1,
90 mp_join : 1,
91 dss : 1,
92 add_addr : 1,
93 rm_addr : 1,
94 family : 4,
95 echo : 1,
96 backup : 1;
97 u32 token;
98 u32 nonce;
99 u64 thmac;
100 u8 hmac[20];
101 u8 join_id;
102 u8 use_map:1,
103 dsn64:1,
104 data_fin:1,
105 use_ack:1,
106 ack64:1,
107 mpc_map:1,
108 __unused:2;
109 u8 addr_id;
110 u8 rm_id;
111 union {
112 struct in_addr addr;
113#if IS_ENABLED(CONFIG_MPTCP_IPV6)
114 struct in6_addr addr6;
115#endif
116 };
117 u64 ahmac;
118 u16 port;
119};
120#endif
121
122struct tcp_options_received {81struct tcp_options_received {
123/* PAWS/RTTM data */82/* PAWS/RTTM data */
124 int ts_recent_stamp;/* Time we stored ts_recent (for aging) */83 int ts_recent_stamp;/* Time we stored ts_recent (for aging) */
@@ -136,9 +95,6 @@ struct tcp_options_received { · 11 unmodified lines
136 u8 num_sacks; /* Number of SACK blocks */95 u8 num_sacks; /* Number of SACK blocks */
137 u16 user_mss; /* mss requested by user in ioctl */96 u16 user_mss; /* mss requested by user in ioctl */
138 u16 mss_clamp; /* Maximal mss, negotiated at connection setup */97 u16 mss_clamp; /* Maximal mss, negotiated at connection setup */
139#if IS_ENABLED(CONFIG_MPTCP)
140 struct mptcp_options_received mptcp;
141#endif
142};98};
143 99
144static inline void tcp_clear_options(struct tcp_options_received *rx_opt)100static inline void tcp_clear_options(struct tcp_options_received *rx_opt)
@@ -148,13 +104,6 @@ static inline void tcp_clear_options(struct tcp_options_received *rx_opt) · 3 unmodified lines
148#if IS_ENABLED(CONFIG_SMC)104#if IS_ENABLED(CONFIG_SMC)
149 rx_opt->smc_ok = 0;105 rx_opt->smc_ok = 0;
150#endif106#endif
151#if IS_ENABLED(CONFIG_MPTCP)
152 rx_opt->mptcp.mp_capable = 0;
153 rx_opt->mptcp.mp_join = 0;
154 rx_opt->mptcp.add_addr = 0;
155 rx_opt->mptcp.rm_addr = 0;
156 rx_opt->mptcp.dss = 0;
157#endif
158}107}
159 108
160/* This is the max number of SACKS that we'll generate and process. It's safe109/* This is the max number of SACKS that we'll generate and process. It's safe
include/linux/tty.h+1−1
@@ -66,7 +66,7 @@ struct tty_buffer { · 65 unmodified lines
66 int read;66 int read;
67 int flags;67 int flags;
68 /* Data points here */68 /* Data points here */
69 unsigned long data[0];69 unsigned long data[];
70};70};
71 71
72/* Values for .flags field of tty_buffer */72/* Values for .flags field of tty_buffer */
include/linux/virtio_net.h+24−2
@@ -3,6 +3,8 @@ · 2 unmodified lines
3#define _LINUX_VIRTIO_NET_H3#define _LINUX_VIRTIO_NET_H
4 4
5#include <linux/if_vlan.h>5#include <linux/if_vlan.h>
6#include <uapi/linux/tcp.h>
7#include <uapi/linux/udp.h>
6#include <uapi/linux/virtio_net.h>8#include <uapi/linux/virtio_net.h>
7 9
8static inline int virtio_net_hdr_set_proto(struct sk_buff *skb,10static inline int virtio_net_hdr_set_proto(struct sk_buff *skb,
@@ -28,17 +30,25 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, · 19 unmodified lines
28 bool little_endian)30 bool little_endian)
29{31{
30 unsigned int gso_type = 0;32 unsigned int gso_type = 0;
33 unsigned int thlen = 0;
34 unsigned int ip_proto;
31 35
32 if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {36 if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
33 switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {37 switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
34 case VIRTIO_NET_HDR_GSO_TCPV4:38 case VIRTIO_NET_HDR_GSO_TCPV4:
35 gso_type = SKB_GSO_TCPV4;39 gso_type = SKB_GSO_TCPV4;
40 ip_proto = IPPROTO_TCP;
41 thlen = sizeof(struct tcphdr);
36 break;42 break;
37 case VIRTIO_NET_HDR_GSO_TCPV6:43 case VIRTIO_NET_HDR_GSO_TCPV6:
38 gso_type = SKB_GSO_TCPV6;44 gso_type = SKB_GSO_TCPV6;
45 ip_proto = IPPROTO_TCP;
46 thlen = sizeof(struct tcphdr);
39 break;47 break;
40 case VIRTIO_NET_HDR_GSO_UDP:48 case VIRTIO_NET_HDR_GSO_UDP:
41 gso_type = SKB_GSO_UDP;49 gso_type = SKB_GSO_UDP;
50 ip_proto = IPPROTO_UDP;
51 thlen = sizeof(struct udphdr);
42 break;52 break;
43 default:53 default:
44 return -EINVAL;54 return -EINVAL;
@@ -57,16 +67,22 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, · 12 unmodified lines
57 67
58 if (!skb_partial_csum_set(skb, start, off))68 if (!skb_partial_csum_set(skb, start, off))
59 return -EINVAL;69 return -EINVAL;
70
71 if (skb_transport_offset(skb) + thlen > skb_headlen(skb))
72 return -EINVAL;
60 } else {73 } else {
61 /* gso packets without NEEDS_CSUM do not set transport_offset.74 /* gso packets without NEEDS_CSUM do not set transport_offset.
62 * probe and drop if does not match one of the above types.75 * probe and drop if does not match one of the above types.
63 */76 */
64 if (gso_type && skb->network_header) {77 if (gso_type && skb->network_header) {
78 struct flow_keys_basic keys;
79
65 if (!skb->protocol)80 if (!skb->protocol)
66 virtio_net_hdr_set_proto(skb, hdr);81 virtio_net_hdr_set_proto(skb, hdr);
67retry:82retry:
68 skb_probe_transport_header(skb);83 if (!skb_flow_dissect_flow_keys_basic(NULL, skb, &keys,
69 if (!skb_transport_header_was_set(skb)) {84 NULL, 0, 0, 0,
85 0)) {
70 /* UFO does not specify ipv4 or 6: try both */86 /* UFO does not specify ipv4 or 6: try both */
71 if (gso_type & SKB_GSO_UDP &&87 if (gso_type & SKB_GSO_UDP &&
72 skb->protocol == htons(ETH_P_IP)) {88 skb->protocol == htons(ETH_P_IP)) {
@@ -75,6 +91,12 @@ retry: · 2 unmodified lines
75 }91 }
76 return -EINVAL;92 return -EINVAL;
77 }93 }
94
95 if (keys.control.thoff + thlen > skb_headlen(skb) ||
96 keys.basic.ip_proto != ip_proto)
97 return -EINVAL;
98
99 skb_set_transport_header(skb, keys.control.thoff);
78 }100 }
79 }101 }
80 102
include/linux/virtio_vsock.h+1−0
@@ -48,6 +48,7 @@ struct virtio_vsock_pkt { · 47 unmodified lines
48 u32 len;48 u32 len;
49 u32 off;49 u32 off;
50 bool reply;50 bool reply;
51 bool tap_delivered;
51};52};
52 53
53struct virtio_vsock_pkt_info {54struct virtio_vsock_pkt_info {