mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
![Linus Torvalds](/assets/img/avatar_default.png)
Pull yet more networking updates from David Miller: 1) Various fixes to the new Redpine Signals wireless driver, from Fariya Fatima. 2) L2TP PPP connect code takes PMTU from the wrong socket, fix from Dmitry Petukhov. 3) UFO and TSO packets differ in whether they include the protocol header in gso_size, account for that in skb_gso_transport_seglen(). From Florian Westphal. 4) If VLAN untagging fails, we double free the SKB in the bridging output path. From Toshiaki Makita. 5) Several call sites of sk->sk_data_ready() were referencing an SKB just added to the socket receive queue in order to calculate the second argument via skb->len. This is dangerous because the moment the skb is added to the receive queue it can be consumed in another context and freed up. It turns out also that none of the sk->sk_data_ready() implementations even care about this second argument. So just kill it off and thus fix all these use-after-free bugs as a side effect. 6) Fix inverted test in tcp_v6_send_response(), from Lorenzo Colitti. 7) pktgen needs to do locking properly for LLTX devices, from Daniel Borkmann. 8) xen-netfront driver initializes TX array entries in RX loop :-) From Vincenzo Maffione. 9) After refactoring, some tunnel drivers allow a tunnel to be configured on top itself. Fix from Nicolas Dichtel. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (46 commits) vti: don't allow to add the same tunnel twice gre: don't allow to add the same tunnel twice drivers: net: xen-netfront: fix array initialization bug pktgen: be friendly to LLTX devices r8152: check RTL8152_UNPLUG net: sun4i-emac: add promiscuous support net/apne: replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO net: ipv6: Fix oif in TCP SYN+ACK route lookup. drivers: net: cpsw: enable interrupts after napi enable and clearing previous interrupts drivers: net: cpsw: discard all packets received when interface is down net: Fix use after free by removing length arg from sk_data_ready callbacks. Drivers: net: hyperv: Address UDP checksum issues Drivers: net: hyperv: Negotiate suitable ndis version for offload support Drivers: net: hyperv: Allocate memory for all possible per-pecket information bridge: Fix double free and memory leak around br_allowed_ingress bonding: Remove debug_fs files when module init fails i40evf: program RSS LUT correctly i40evf: remove open-coded skb_cow_head ixgb: remove open-coded skb_cow_head igbvf: remove open-coded skb_cow_head ...
74 lines
2 KiB
C
74 lines
2 KiB
C
/*
|
|
* linux/include/linux/sunrpc/svcsock.h
|
|
*
|
|
* RPC server socket I/O.
|
|
*
|
|
* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
|
|
*/
|
|
|
|
#ifndef SUNRPC_SVCSOCK_H
|
|
#define SUNRPC_SVCSOCK_H
|
|
|
|
#include <linux/sunrpc/svc.h>
|
|
#include <linux/sunrpc/svc_xprt.h>
|
|
|
|
/*
|
|
* RPC server socket.
|
|
*/
|
|
struct svc_sock {
|
|
struct svc_xprt sk_xprt;
|
|
struct socket * sk_sock; /* berkeley socket layer */
|
|
struct sock * sk_sk; /* INET layer */
|
|
|
|
/* We keep the old state_change and data_ready CB's here */
|
|
void (*sk_ostate)(struct sock *);
|
|
void (*sk_odata)(struct sock *);
|
|
void (*sk_owspace)(struct sock *);
|
|
|
|
/* private TCP part */
|
|
/* On-the-wire fragment header: */
|
|
__be32 sk_reclen;
|
|
/* As we receive a record, this includes the length received so
|
|
* far (including the fragment header): */
|
|
u32 sk_tcplen;
|
|
/* Total length of the data (not including fragment headers)
|
|
* received so far in the fragments making up this rpc: */
|
|
u32 sk_datalen;
|
|
|
|
struct page * sk_pages[RPCSVC_MAXPAGES]; /* received data */
|
|
};
|
|
|
|
static inline u32 svc_sock_reclen(struct svc_sock *svsk)
|
|
{
|
|
return ntohl(svsk->sk_reclen) & RPC_FRAGMENT_SIZE_MASK;
|
|
}
|
|
|
|
static inline u32 svc_sock_final_rec(struct svc_sock *svsk)
|
|
{
|
|
return ntohl(svsk->sk_reclen) & RPC_LAST_STREAM_FRAGMENT;
|
|
}
|
|
|
|
/*
|
|
* Function prototypes.
|
|
*/
|
|
void svc_close_net(struct svc_serv *, struct net *);
|
|
int svc_recv(struct svc_rqst *, long);
|
|
int svc_send(struct svc_rqst *);
|
|
void svc_drop(struct svc_rqst *);
|
|
void svc_sock_update_bufs(struct svc_serv *serv);
|
|
bool svc_alien_sock(struct net *net, int fd);
|
|
int svc_addsock(struct svc_serv *serv, const int fd,
|
|
char *name_return, const size_t len);
|
|
void svc_init_xprt_sock(void);
|
|
void svc_cleanup_xprt_sock(void);
|
|
struct svc_xprt *svc_sock_create(struct svc_serv *serv, int prot);
|
|
void svc_sock_destroy(struct svc_xprt *);
|
|
|
|
/*
|
|
* svc_makesock socket characteristics
|
|
*/
|
|
#define SVC_SOCK_DEFAULTS (0U)
|
|
#define SVC_SOCK_ANONYMOUS (1U << 0) /* don't register with pmap */
|
|
#define SVC_SOCK_TEMPORARY (1U << 1) /* flag socket as temporary */
|
|
|
|
#endif /* SUNRPC_SVCSOCK_H */
|