Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1699 commits) bnx2/bnx2x: Unsupported Ethtool operations should return -EINVAL. vlan: Calling vlan_hwaccel_do_receive() is always valid. tproxy: use the interface primary IP address as a default value for --on-ip tproxy: added IPv6 support to the socket match cxgb3: function namespace cleanup tproxy: added IPv6 support to the TPROXY target tproxy: added IPv6 socket lookup function to nf_tproxy_core be2net: Changes to use only priority codes allowed by f/w tproxy: allow non-local binds of IPv6 sockets if IP_TRANSPARENT is enabled tproxy: added tproxy sockopt interface in the IPV6 layer tproxy: added udp6_lib_lookup function tproxy: added const specifiers to udp lookup functions tproxy: split off ipv6 defragmentation to a separate module l2tp: small cleanup nf_nat: restrict ICMP translation for embedded header can: mcp251x: fix generation of error frames can: mcp251x: fix endless loop in interrupt handler if CANINTF_MERRF is set can-raw: add msg_flags to distinguish local traffic 9p: client code cleanup rds: make local functions/variables static ... Fix up conflicts in net/core/dev.c, drivers/net/pcmcia/smc91c92_cs.c and drivers/net/wireless/ath/ath9k/debug.c as per David
This commit is contained in:
37
net/socket.c
37
net/socket.c
@@ -209,8 +209,8 @@ int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr)
|
||||
* specified. Zero is returned for a success.
|
||||
*/
|
||||
|
||||
int move_addr_to_user(struct sockaddr *kaddr, int klen, void __user *uaddr,
|
||||
int __user *ulen)
|
||||
static int move_addr_to_user(struct sockaddr *kaddr, int klen,
|
||||
void __user *uaddr, int __user *ulen)
|
||||
{
|
||||
int err;
|
||||
int len;
|
||||
@@ -536,14 +536,13 @@ void sock_release(struct socket *sock)
|
||||
}
|
||||
EXPORT_SYMBOL(sock_release);
|
||||
|
||||
int sock_tx_timestamp(struct msghdr *msg, struct sock *sk,
|
||||
union skb_shared_tx *shtx)
|
||||
int sock_tx_timestamp(struct sock *sk, __u8 *tx_flags)
|
||||
{
|
||||
shtx->flags = 0;
|
||||
*tx_flags = 0;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE))
|
||||
shtx->hardware = 1;
|
||||
*tx_flags |= SKBTX_HW_TSTAMP;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE))
|
||||
shtx->software = 1;
|
||||
*tx_flags |= SKBTX_SW_TSTAMP;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(sock_tx_timestamp);
|
||||
@@ -663,7 +662,8 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__sock_recv_timestamp);
|
||||
|
||||
inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
|
||||
static inline void sock_recv_drops(struct msghdr *msg, struct sock *sk,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
if (sock_flag(sk, SOCK_RXQ_OVFL) && skb && skb->dropcount)
|
||||
put_cmsg(msg, SOL_SOCKET, SO_RXQ_OVFL,
|
||||
@@ -1920,7 +1920,8 @@ SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
|
||||
* Afterwards, it will be a kernel pointer. Thus the compiler-assisted
|
||||
* checking falls down on this.
|
||||
*/
|
||||
if (copy_from_user(ctl_buf, (void __user *)msg_sys.msg_control,
|
||||
if (copy_from_user(ctl_buf,
|
||||
(void __user __force *)msg_sys.msg_control,
|
||||
ctl_len))
|
||||
goto out_freectl;
|
||||
msg_sys.msg_control = ctl_buf;
|
||||
@@ -3055,14 +3056,19 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
|
||||
char *optval, int *optlen)
|
||||
{
|
||||
mm_segment_t oldfs = get_fs();
|
||||
char __user *uoptval;
|
||||
int __user *uoptlen;
|
||||
int err;
|
||||
|
||||
uoptval = (char __user __force *) optval;
|
||||
uoptlen = (int __user __force *) optlen;
|
||||
|
||||
set_fs(KERNEL_DS);
|
||||
if (level == SOL_SOCKET)
|
||||
err = sock_getsockopt(sock, level, optname, optval, optlen);
|
||||
err = sock_getsockopt(sock, level, optname, uoptval, uoptlen);
|
||||
else
|
||||
err = sock->ops->getsockopt(sock, level, optname, optval,
|
||||
optlen);
|
||||
err = sock->ops->getsockopt(sock, level, optname, uoptval,
|
||||
uoptlen);
|
||||
set_fs(oldfs);
|
||||
return err;
|
||||
}
|
||||
@@ -3072,13 +3078,16 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
|
||||
char *optval, unsigned int optlen)
|
||||
{
|
||||
mm_segment_t oldfs = get_fs();
|
||||
char __user *uoptval;
|
||||
int err;
|
||||
|
||||
uoptval = (char __user __force *) optval;
|
||||
|
||||
set_fs(KERNEL_DS);
|
||||
if (level == SOL_SOCKET)
|
||||
err = sock_setsockopt(sock, level, optname, optval, optlen);
|
||||
err = sock_setsockopt(sock, level, optname, uoptval, optlen);
|
||||
else
|
||||
err = sock->ops->setsockopt(sock, level, optname, optval,
|
||||
err = sock->ops->setsockopt(sock, level, optname, uoptval,
|
||||
optlen);
|
||||
set_fs(oldfs);
|
||||
return err;
|
||||
|
Reference in New Issue
Block a user