提交 e71a4783 编写于 作者: S Stephen Hemminger 提交者: David S. Miller

[NET] core: whitespace cleanup

Fix whitespace around keywords. Fix indentation especially of switch
statements.
Signed-off-by: NStephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 add459aa
...@@ -34,11 +34,11 @@ static inline int iov_from_user_compat_to_kern(struct iovec *kiov, ...@@ -34,11 +34,11 @@ static inline int iov_from_user_compat_to_kern(struct iovec *kiov,
{ {
int tot_len = 0; int tot_len = 0;
while(niov > 0) { while (niov > 0) {
compat_uptr_t buf; compat_uptr_t buf;
compat_size_t len; compat_size_t len;
if(get_user(len, &uiov32->iov_len) || if (get_user(len, &uiov32->iov_len) ||
get_user(buf, &uiov32->iov_base)) { get_user(buf, &uiov32->iov_base)) {
tot_len = -EFAULT; tot_len = -EFAULT;
break; break;
...@@ -78,12 +78,12 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov, ...@@ -78,12 +78,12 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,
{ {
int tot_len; int tot_len;
if(kern_msg->msg_namelen) { if (kern_msg->msg_namelen) {
if(mode==VERIFY_READ) { if (mode==VERIFY_READ) {
int err = move_addr_to_kernel(kern_msg->msg_name, int err = move_addr_to_kernel(kern_msg->msg_name,
kern_msg->msg_namelen, kern_msg->msg_namelen,
kern_address); kern_address);
if(err < 0) if (err < 0)
return err; return err;
} }
kern_msg->msg_name = kern_address; kern_msg->msg_name = kern_address;
...@@ -93,7 +93,7 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov, ...@@ -93,7 +93,7 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,
tot_len = iov_from_user_compat_to_kern(kern_iov, tot_len = iov_from_user_compat_to_kern(kern_iov,
(struct compat_iovec __user *)kern_msg->msg_iov, (struct compat_iovec __user *)kern_msg->msg_iov,
kern_msg->msg_iovlen); kern_msg->msg_iovlen);
if(tot_len >= 0) if (tot_len >= 0)
kern_msg->msg_iov = kern_iov; kern_msg->msg_iov = kern_iov;
return tot_len; return tot_len;
...@@ -146,8 +146,8 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk, ...@@ -146,8 +146,8 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk,
kcmlen = 0; kcmlen = 0;
kcmsg_base = kcmsg = (struct cmsghdr *)stackbuf; kcmsg_base = kcmsg = (struct cmsghdr *)stackbuf;
ucmsg = CMSG_COMPAT_FIRSTHDR(kmsg); ucmsg = CMSG_COMPAT_FIRSTHDR(kmsg);
while(ucmsg != NULL) { while (ucmsg != NULL) {
if(get_user(ucmlen, &ucmsg->cmsg_len)) if (get_user(ucmlen, &ucmsg->cmsg_len))
return -EFAULT; return -EFAULT;
/* Catch bogons. */ /* Catch bogons. */
...@@ -160,7 +160,7 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk, ...@@ -160,7 +160,7 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk,
kcmlen += tmp; kcmlen += tmp;
ucmsg = cmsg_compat_nxthdr(kmsg, ucmsg, ucmlen); ucmsg = cmsg_compat_nxthdr(kmsg, ucmsg, ucmlen);
} }
if(kcmlen == 0) if (kcmlen == 0)
return -EINVAL; return -EINVAL;
/* The kcmlen holds the 64-bit version of the control length. /* The kcmlen holds the 64-bit version of the control length.
...@@ -176,7 +176,7 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk, ...@@ -176,7 +176,7 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk,
/* Now copy them over neatly. */ /* Now copy them over neatly. */
memset(kcmsg, 0, kcmlen); memset(kcmsg, 0, kcmlen);
ucmsg = CMSG_COMPAT_FIRSTHDR(kmsg); ucmsg = CMSG_COMPAT_FIRSTHDR(kmsg);
while(ucmsg != NULL) { while (ucmsg != NULL) {
if (__get_user(ucmlen, &ucmsg->cmsg_len)) if (__get_user(ucmlen, &ucmsg->cmsg_len))
goto Efault; goto Efault;
if (!CMSG_COMPAT_OK(ucmlen, ucmsg, kmsg)) if (!CMSG_COMPAT_OK(ucmlen, ucmsg, kmsg))
...@@ -219,7 +219,7 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat ...@@ -219,7 +219,7 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
struct compat_cmsghdr cmhdr; struct compat_cmsghdr cmhdr;
int cmlen; int cmlen;
if(cm == NULL || kmsg->msg_controllen < sizeof(*cm)) { if (cm == NULL || kmsg->msg_controllen < sizeof(*cm)) {
kmsg->msg_flags |= MSG_CTRUNC; kmsg->msg_flags |= MSG_CTRUNC;
return 0; /* XXX: return error? check spec. */ return 0; /* XXX: return error? check spec. */
} }
...@@ -233,7 +233,7 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat ...@@ -233,7 +233,7 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
} }
cmlen = CMSG_COMPAT_LEN(len); cmlen = CMSG_COMPAT_LEN(len);
if(kmsg->msg_controllen < cmlen) { if (kmsg->msg_controllen < cmlen) {
kmsg->msg_flags |= MSG_CTRUNC; kmsg->msg_flags |= MSG_CTRUNC;
cmlen = kmsg->msg_controllen; cmlen = kmsg->msg_controllen;
} }
...@@ -241,9 +241,9 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat ...@@ -241,9 +241,9 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
cmhdr.cmsg_type = type; cmhdr.cmsg_type = type;
cmhdr.cmsg_len = cmlen; cmhdr.cmsg_len = cmlen;
if(copy_to_user(cm, &cmhdr, sizeof cmhdr)) if (copy_to_user(cm, &cmhdr, sizeof cmhdr))
return -EFAULT; return -EFAULT;
if(copy_to_user(CMSG_COMPAT_DATA(cm), data, cmlen - sizeof(struct compat_cmsghdr))) if (copy_to_user(CMSG_COMPAT_DATA(cm), data, cmlen - sizeof(struct compat_cmsghdr)))
return -EFAULT; return -EFAULT;
cmlen = CMSG_COMPAT_SPACE(len); cmlen = CMSG_COMPAT_SPACE(len);
kmsg->msg_control += cmlen; kmsg->msg_control += cmlen;
...@@ -646,7 +646,7 @@ asmlinkage long compat_sys_socketcall(int call, u32 __user *args) ...@@ -646,7 +646,7 @@ asmlinkage long compat_sys_socketcall(int call, u32 __user *args)
a0 = a[0]; a0 = a[0];
a1 = a[1]; a1 = a[1];
switch(call) { switch (call) {
case SYS_SOCKET: case SYS_SOCKET:
ret = sys_socket(a0, a1, a[2]); ret = sys_socket(a0, a1, a[2]);
break; break;
......
...@@ -836,7 +836,7 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -836,7 +836,7 @@ int dev_ethtool(struct ifreq *ifr)
return -EPERM; return -EPERM;
} }
if(dev->ethtool_ops->begin) if (dev->ethtool_ops->begin)
if ((rc = dev->ethtool_ops->begin(dev)) < 0) if ((rc = dev->ethtool_ops->begin(dev)) < 0)
return rc; return rc;
...@@ -952,7 +952,7 @@ int dev_ethtool(struct ifreq *ifr) ...@@ -952,7 +952,7 @@ int dev_ethtool(struct ifreq *ifr)
rc = -EOPNOTSUPP; rc = -EOPNOTSUPP;
} }
if(dev->ethtool_ops->complete) if (dev->ethtool_ops->complete)
dev->ethtool_ops->complete(dev); dev->ethtool_ops->complete(dev);
if (old_features != dev->features) if (old_features != dev->features)
......
...@@ -352,8 +352,8 @@ static ssize_t wireless_show(struct device *d, char *buf, ...@@ -352,8 +352,8 @@ static ssize_t wireless_show(struct device *d, char *buf,
read_lock(&dev_base_lock); read_lock(&dev_base_lock);
if (dev_isalive(dev)) { if (dev_isalive(dev)) {
if(dev->wireless_handlers && if (dev->wireless_handlers &&
dev->wireless_handlers->get_wireless_stats) dev->wireless_handlers->get_wireless_stats)
iw = dev->wireless_handlers->get_wireless_stats(dev); iw = dev->wireless_handlers->get_wireless_stats(dev);
if (iw != NULL) if (iw != NULL)
ret = (*format)(iw, buf); ret = (*format)(iw, buf);
......
...@@ -645,7 +645,7 @@ static int pktgen_if_show(struct seq_file *seq, void *v) ...@@ -645,7 +645,7 @@ static int pktgen_if_show(struct seq_file *seq, void *v)
if (pkt_dev->nr_labels) { if (pkt_dev->nr_labels) {
unsigned i; unsigned i;
seq_printf(seq, " mpls: "); seq_printf(seq, " mpls: ");
for(i = 0; i < pkt_dev->nr_labels; i++) for (i = 0; i < pkt_dev->nr_labels; i++)
seq_printf(seq, "%08x%s", ntohl(pkt_dev->labels[i]), seq_printf(seq, "%08x%s", ntohl(pkt_dev->labels[i]),
i == pkt_dev->nr_labels-1 ? "\n" : ", "); i == pkt_dev->nr_labels-1 ? "\n" : ", ");
} }
...@@ -750,7 +750,7 @@ static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, __u32 ...@@ -750,7 +750,7 @@ static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, __u32
int i = 0; int i = 0;
*num = 0; *num = 0;
for(; i < maxlen; i++) { for (; i < maxlen; i++) {
char c; char c;
*num <<= 4; *num <<= 4;
if (get_user(c, &user_buffer[i])) if (get_user(c, &user_buffer[i]))
...@@ -858,7 +858,7 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) ...@@ -858,7 +858,7 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev)
n++; n++;
if (n >= MAX_MPLS_LABELS) if (n >= MAX_MPLS_LABELS)
return -E2BIG; return -E2BIG;
} while(c == ','); } while (c == ',');
pkt_dev->nr_labels = n; pkt_dev->nr_labels = n;
return i; return i;
...@@ -1487,7 +1487,7 @@ static ssize_t pktgen_if_write(struct file *file, ...@@ -1487,7 +1487,7 @@ static ssize_t pktgen_if_write(struct file *file,
if (len < 0) { return len; } if (len < 0) { return len; }
i += len; i += len;
offset = sprintf(pg_result, "OK: mpls="); offset = sprintf(pg_result, "OK: mpls=");
for(n = 0; n < pkt_dev->nr_labels; n++) for (n = 0; n < pkt_dev->nr_labels; n++)
offset += sprintf(pg_result + offset, offset += sprintf(pg_result + offset,
"%08x%s", ntohl(pkt_dev->labels[n]), "%08x%s", ntohl(pkt_dev->labels[n]),
n == pkt_dev->nr_labels-1 ? "" : ","); n == pkt_dev->nr_labels-1 ? "" : ",");
...@@ -2148,7 +2148,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev) ...@@ -2148,7 +2148,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev)
if (pkt_dev->flags & F_MPLS_RND) { if (pkt_dev->flags & F_MPLS_RND) {
unsigned i; unsigned i;
for(i = 0; i < pkt_dev->nr_labels; i++) for (i = 0; i < pkt_dev->nr_labels; i++)
if (pkt_dev->labels[i] & MPLS_STACK_BOTTOM) if (pkt_dev->labels[i] & MPLS_STACK_BOTTOM)
pkt_dev->labels[i] = MPLS_STACK_BOTTOM | pkt_dev->labels[i] = MPLS_STACK_BOTTOM |
((__force __be32)random32() & ((__force __be32)random32() &
...@@ -2281,7 +2281,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev) ...@@ -2281,7 +2281,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev)
static void mpls_push(__be32 *mpls, struct pktgen_dev *pkt_dev) static void mpls_push(__be32 *mpls, struct pktgen_dev *pkt_dev)
{ {
unsigned i; unsigned i;
for(i = 0; i < pkt_dev->nr_labels; i++) { for (i = 0; i < pkt_dev->nr_labels; i++) {
*mpls++ = pkt_dev->labels[i] & ~MPLS_STACK_BOTTOM; *mpls++ = pkt_dev->labels[i] & ~MPLS_STACK_BOTTOM;
} }
mpls--; mpls--;
...@@ -2341,7 +2341,7 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, ...@@ -2341,7 +2341,7 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
mpls_push(mpls, pkt_dev); mpls_push(mpls, pkt_dev);
if (pkt_dev->vlan_id != 0xffff) { if (pkt_dev->vlan_id != 0xffff) {
if(pkt_dev->svlan_id != 0xffff) { if (pkt_dev->svlan_id != 0xffff) {
svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
*svlan_tci = build_tci(pkt_dev->svlan_id, *svlan_tci = build_tci(pkt_dev->svlan_id,
pkt_dev->svlan_cfi, pkt_dev->svlan_cfi,
...@@ -2677,7 +2677,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, ...@@ -2677,7 +2677,7 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
mpls_push(mpls, pkt_dev); mpls_push(mpls, pkt_dev);
if (pkt_dev->vlan_id != 0xffff) { if (pkt_dev->vlan_id != 0xffff) {
if(pkt_dev->svlan_id != 0xffff) { if (pkt_dev->svlan_id != 0xffff) {
svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
*svlan_tci = build_tci(pkt_dev->svlan_id, *svlan_tci = build_tci(pkt_dev->svlan_id,
pkt_dev->svlan_cfi, pkt_dev->svlan_cfi,
......
...@@ -361,8 +361,8 @@ int sock_setsockopt(struct socket *sock, int level, int optname, ...@@ -361,8 +361,8 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
} }
#endif #endif
if(optlen<sizeof(int)) if (optlen < sizeof(int))
return(-EINVAL); return -EINVAL;
if (get_user(val, (int __user *)optval)) if (get_user(val, (int __user *)optval))
return -EFAULT; return -EFAULT;
...@@ -371,265 +371,263 @@ int sock_setsockopt(struct socket *sock, int level, int optname, ...@@ -371,265 +371,263 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
lock_sock(sk); lock_sock(sk);
switch(optname) switch(optname) {
{ case SO_DEBUG:
case SO_DEBUG: if (val && !capable(CAP_NET_ADMIN)) {
if(val && !capable(CAP_NET_ADMIN)) ret = -EACCES;
{ }
ret = -EACCES; else if (valbool)
} sock_set_flag(sk, SOCK_DBG);
else if (valbool) else
sock_set_flag(sk, SOCK_DBG); sock_reset_flag(sk, SOCK_DBG);
else break;
sock_reset_flag(sk, SOCK_DBG); case SO_REUSEADDR:
break; sk->sk_reuse = valbool;
case SO_REUSEADDR: break;
sk->sk_reuse = valbool; case SO_TYPE:
break; case SO_ERROR:
case SO_TYPE: ret = -ENOPROTOOPT;
case SO_ERROR: break;
ret = -ENOPROTOOPT; case SO_DONTROUTE:
break; if (valbool)
case SO_DONTROUTE: sock_set_flag(sk, SOCK_LOCALROUTE);
if (valbool) else
sock_set_flag(sk, SOCK_LOCALROUTE); sock_reset_flag(sk, SOCK_LOCALROUTE);
else break;
sock_reset_flag(sk, SOCK_LOCALROUTE); case SO_BROADCAST:
break; sock_valbool_flag(sk, SOCK_BROADCAST, valbool);
case SO_BROADCAST: break;
sock_valbool_flag(sk, SOCK_BROADCAST, valbool); case SO_SNDBUF:
break; /* Don't error on this BSD doesn't and if you think
case SO_SNDBUF: about it this is right. Otherwise apps have to
/* Don't error on this BSD doesn't and if you think play 'guess the biggest size' games. RCVBUF/SNDBUF
about it this is right. Otherwise apps have to are treated in BSD as hints */
play 'guess the biggest size' games. RCVBUF/SNDBUF
are treated in BSD as hints */ if (val > sysctl_wmem_max)
val = sysctl_wmem_max;
if (val > sysctl_wmem_max)
val = sysctl_wmem_max;
set_sndbuf: set_sndbuf:
sk->sk_userlocks |= SOCK_SNDBUF_LOCK; sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
if ((val * 2) < SOCK_MIN_SNDBUF) if ((val * 2) < SOCK_MIN_SNDBUF)
sk->sk_sndbuf = SOCK_MIN_SNDBUF; sk->sk_sndbuf = SOCK_MIN_SNDBUF;
else else
sk->sk_sndbuf = val * 2; sk->sk_sndbuf = val * 2;
/* /*
* Wake up sending tasks if we * Wake up sending tasks if we
* upped the value. * upped the value.
*/ */
sk->sk_write_space(sk); sk->sk_write_space(sk);
break; break;
case SO_SNDBUFFORCE: case SO_SNDBUFFORCE:
if (!capable(CAP_NET_ADMIN)) { if (!capable(CAP_NET_ADMIN)) {
ret = -EPERM; ret = -EPERM;
break; break;
} }
goto set_sndbuf; goto set_sndbuf;
case SO_RCVBUF: case SO_RCVBUF:
/* Don't error on this BSD doesn't and if you think /* Don't error on this BSD doesn't and if you think
about it this is right. Otherwise apps have to about it this is right. Otherwise apps have to
play 'guess the biggest size' games. RCVBUF/SNDBUF play 'guess the biggest size' games. RCVBUF/SNDBUF
are treated in BSD as hints */ are treated in BSD as hints */
if (val > sysctl_rmem_max) if (val > sysctl_rmem_max)
val = sysctl_rmem_max; val = sysctl_rmem_max;
set_rcvbuf: set_rcvbuf:
sk->sk_userlocks |= SOCK_RCVBUF_LOCK; sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
/* /*
* We double it on the way in to account for * We double it on the way in to account for
* "struct sk_buff" etc. overhead. Applications * "struct sk_buff" etc. overhead. Applications
* assume that the SO_RCVBUF setting they make will * assume that the SO_RCVBUF setting they make will
* allow that much actual data to be received on that * allow that much actual data to be received on that
* socket. * socket.
* *
* Applications are unaware that "struct sk_buff" and * Applications are unaware that "struct sk_buff" and
* other overheads allocate from the receive buffer * other overheads allocate from the receive buffer
* during socket buffer allocation. * during socket buffer allocation.
* *
* And after considering the possible alternatives, * And after considering the possible alternatives,
* returning the value we actually used in getsockopt * returning the value we actually used in getsockopt
* is the most desirable behavior. * is the most desirable behavior.
*/ */
if ((val * 2) < SOCK_MIN_RCVBUF) if ((val * 2) < SOCK_MIN_RCVBUF)
sk->sk_rcvbuf = SOCK_MIN_RCVBUF; sk->sk_rcvbuf = SOCK_MIN_RCVBUF;
else else
sk->sk_rcvbuf = val * 2; sk->sk_rcvbuf = val * 2;
break;
case SO_RCVBUFFORCE:
if (!capable(CAP_NET_ADMIN)) {
ret = -EPERM;
break; break;
}
goto set_rcvbuf;
case SO_RCVBUFFORCE: case SO_KEEPALIVE:
if (!capable(CAP_NET_ADMIN)) {
ret = -EPERM;
break;
}
goto set_rcvbuf;
case SO_KEEPALIVE:
#ifdef CONFIG_INET #ifdef CONFIG_INET
if (sk->sk_protocol == IPPROTO_TCP) if (sk->sk_protocol == IPPROTO_TCP)
tcp_set_keepalive(sk, valbool); tcp_set_keepalive(sk, valbool);
#endif #endif
sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool); sock_valbool_flag(sk, SOCK_KEEPOPEN, valbool);
break; break;
case SO_OOBINLINE: case SO_OOBINLINE:
sock_valbool_flag(sk, SOCK_URGINLINE, valbool); sock_valbool_flag(sk, SOCK_URGINLINE, valbool);
break;
case SO_NO_CHECK:
sk->sk_no_check = valbool;
break;
case SO_PRIORITY:
if ((val >= 0 && val <= 6) || capable(CAP_NET_ADMIN))
sk->sk_priority = val;
else
ret = -EPERM;
break;
case SO_LINGER:
if (optlen < sizeof(ling)) {
ret = -EINVAL; /* 1003.1g */
break; break;
}
case SO_NO_CHECK: if (copy_from_user(&ling,optval,sizeof(ling))) {
sk->sk_no_check = valbool; ret = -EFAULT;
break;
case SO_PRIORITY:
if ((val >= 0 && val <= 6) || capable(CAP_NET_ADMIN))
sk->sk_priority = val;
else
ret = -EPERM;
break; break;
}
case SO_LINGER: if (!ling.l_onoff)
if(optlen<sizeof(ling)) { sock_reset_flag(sk, SOCK_LINGER);
ret = -EINVAL; /* 1003.1g */ else {
break;
}
if (copy_from_user(&ling,optval,sizeof(ling))) {
ret = -EFAULT;
break;
}
if (!ling.l_onoff)
sock_reset_flag(sk, SOCK_LINGER);
else {
#if (BITS_PER_LONG == 32) #if (BITS_PER_LONG == 32)
if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ) if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT; sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT;
else
#endif
sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
sock_set_flag(sk, SOCK_LINGER);
}
break;
case SO_BSDCOMPAT:
sock_warn_obsolete_bsdism("setsockopt");
break;
case SO_PASSCRED:
if (valbool)
set_bit(SOCK_PASSCRED, &sock->flags);
else else
clear_bit(SOCK_PASSCRED, &sock->flags); #endif
break; sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
sock_set_flag(sk, SOCK_LINGER);
case SO_TIMESTAMP: }
if (valbool) { break;
sock_set_flag(sk, SOCK_RCVTSTAMP);
sock_enable_timestamp(sk); case SO_BSDCOMPAT:
} else sock_warn_obsolete_bsdism("setsockopt");
sock_reset_flag(sk, SOCK_RCVTSTAMP); break;
break;
case SO_PASSCRED:
case SO_RCVLOWAT: if (valbool)
if (val < 0) set_bit(SOCK_PASSCRED, &sock->flags);
val = INT_MAX; else
sk->sk_rcvlowat = val ? : 1; clear_bit(SOCK_PASSCRED, &sock->flags);
break; break;
case SO_TIMESTAMP:
if (valbool) {
sock_set_flag(sk, SOCK_RCVTSTAMP);
sock_enable_timestamp(sk);
} else
sock_reset_flag(sk, SOCK_RCVTSTAMP);
break;
case SO_RCVLOWAT:
if (val < 0)
val = INT_MAX;
sk->sk_rcvlowat = val ? : 1;
break;
case SO_RCVTIMEO:
ret = sock_set_timeout(&sk->sk_rcvtimeo, optval, optlen);
break;
case SO_SNDTIMEO:
ret = sock_set_timeout(&sk->sk_sndtimeo, optval, optlen);
break;
case SO_RCVTIMEO: #ifdef CONFIG_NETDEVICES
ret = sock_set_timeout(&sk->sk_rcvtimeo, optval, optlen); case SO_BINDTODEVICE:
break; {
char devname[IFNAMSIZ];
case SO_SNDTIMEO: /* Sorry... */
ret = sock_set_timeout(&sk->sk_sndtimeo, optval, optlen); if (!capable(CAP_NET_RAW)) {
ret = -EPERM;
break; break;
}
#ifdef CONFIG_NETDEVICES /* Bind this socket to a particular device like "eth0",
case SO_BINDTODEVICE: * as specified in the passed interface name. If the
{ * name is "" or the option length is zero the socket
char devname[IFNAMSIZ]; * is not bound.
*/
/* Sorry... */ if (!valbool) {
if (!capable(CAP_NET_RAW)) { sk->sk_bound_dev_if = 0;
ret = -EPERM; } else {
if (optlen > IFNAMSIZ - 1)
optlen = IFNAMSIZ - 1;
memset(devname, 0, sizeof(devname));
if (copy_from_user(devname, optval, optlen)) {
ret = -EFAULT;
break; break;
} }
/* Bind this socket to a particular device like "eth0", /* Remove any cached route for this socket. */
* as specified in the passed interface name. If the sk_dst_reset(sk);
* name is "" or the option length is zero the socket
* is not bound.
*/
if (!valbool) { if (devname[0] == '\0') {
sk->sk_bound_dev_if = 0; sk->sk_bound_dev_if = 0;
} else { } else {
if (optlen > IFNAMSIZ - 1) struct net_device *dev = dev_get_by_name(devname);
optlen = IFNAMSIZ - 1; if (!dev) {
memset(devname, 0, sizeof(devname)); ret = -ENODEV;
if (copy_from_user(devname, optval, optlen)) {
ret = -EFAULT;
break; break;
} }
sk->sk_bound_dev_if = dev->ifindex;
/* Remove any cached route for this socket. */ dev_put(dev);
sk_dst_reset(sk);
if (devname[0] == '\0') {
sk->sk_bound_dev_if = 0;
} else {
struct net_device *dev = dev_get_by_name(devname);
if (!dev) {
ret = -ENODEV;
break;
}
sk->sk_bound_dev_if = dev->ifindex;
dev_put(dev);
}
} }
break;
} }
break;
}
#endif #endif
case SO_ATTACH_FILTER: case SO_ATTACH_FILTER:
ret = -EINVAL; ret = -EINVAL;
if (optlen == sizeof(struct sock_fprog)) { if (optlen == sizeof(struct sock_fprog)) {
struct sock_fprog fprog; struct sock_fprog fprog;
ret = -EFAULT;
if (copy_from_user(&fprog, optval, sizeof(fprog)))
break;
ret = sk_attach_filter(&fprog, sk);
}
break;
case SO_DETACH_FILTER: ret = -EFAULT;
rcu_read_lock_bh(); if (copy_from_user(&fprog, optval, sizeof(fprog)))
filter = rcu_dereference(sk->sk_filter);
if (filter) {
rcu_assign_pointer(sk->sk_filter, NULL);
sk_filter_release(sk, filter);
rcu_read_unlock_bh();
break; break;
}
ret = sk_attach_filter(&fprog, sk);
}
break;
case SO_DETACH_FILTER:
rcu_read_lock_bh();
filter = rcu_dereference(sk->sk_filter);
if (filter) {
rcu_assign_pointer(sk->sk_filter, NULL);
sk_filter_release(sk, filter);
rcu_read_unlock_bh(); rcu_read_unlock_bh();
ret = -ENONET;
break; break;
}
rcu_read_unlock_bh();
ret = -ENONET;
break;
case SO_PASSSEC: case SO_PASSSEC:
if (valbool) if (valbool)
set_bit(SOCK_PASSSEC, &sock->flags); set_bit(SOCK_PASSSEC, &sock->flags);
else else
clear_bit(SOCK_PASSSEC, &sock->flags); clear_bit(SOCK_PASSSEC, &sock->flags);
break; break;
/* We implement the SO_SNDLOWAT etc to /* We implement the SO_SNDLOWAT etc to
not be settable (1003.1g 5.3) */ not be settable (1003.1g 5.3) */
default: default:
ret = -ENOPROTOOPT; ret = -ENOPROTOOPT;
break; break;
} }
release_sock(sk); release_sock(sk);
return ret; return ret;
...@@ -641,8 +639,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, ...@@ -641,8 +639,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
union union {
{
int val; int val;
struct linger ling; struct linger ling;
struct timeval tm; struct timeval tm;
...@@ -651,148 +648,148 @@ int sock_getsockopt(struct socket *sock, int level, int optname, ...@@ -651,148 +648,148 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
unsigned int lv = sizeof(int); unsigned int lv = sizeof(int);
int len; int len;
if(get_user(len,optlen)) if (get_user(len, optlen))
return -EFAULT; return -EFAULT;
if(len < 0) if (len < 0)
return -EINVAL; return -EINVAL;
switch(optname) switch(optname) {
{ case SO_DEBUG:
case SO_DEBUG: v.val = sock_flag(sk, SOCK_DBG);
v.val = sock_flag(sk, SOCK_DBG); break;
break;
case SO_DONTROUTE:
case SO_DONTROUTE: v.val = sock_flag(sk, SOCK_LOCALROUTE);
v.val = sock_flag(sk, SOCK_LOCALROUTE); break;
break;
case SO_BROADCAST:
case SO_BROADCAST: v.val = !!sock_flag(sk, SOCK_BROADCAST);
v.val = !!sock_flag(sk, SOCK_BROADCAST); break;
break;
case SO_SNDBUF:
case SO_SNDBUF: v.val = sk->sk_sndbuf;
v.val = sk->sk_sndbuf; break;
break;
case SO_RCVBUF:
case SO_RCVBUF: v.val = sk->sk_rcvbuf;
v.val = sk->sk_rcvbuf; break;
break;
case SO_REUSEADDR:
case SO_REUSEADDR: v.val = sk->sk_reuse;
v.val = sk->sk_reuse; break;
break;
case SO_KEEPALIVE:
case SO_KEEPALIVE: v.val = !!sock_flag(sk, SOCK_KEEPOPEN);
v.val = !!sock_flag(sk, SOCK_KEEPOPEN); break;
break;
case SO_TYPE:
case SO_TYPE: v.val = sk->sk_type;
v.val = sk->sk_type; break;
break;
case SO_ERROR:
case SO_ERROR: v.val = -sock_error(sk);
v.val = -sock_error(sk); if (v.val==0)
if(v.val==0) v.val = xchg(&sk->sk_err_soft, 0);
v.val = xchg(&sk->sk_err_soft, 0); break;
break;
case SO_OOBINLINE:
case SO_OOBINLINE: v.val = !!sock_flag(sk, SOCK_URGINLINE);
v.val = !!sock_flag(sk, SOCK_URGINLINE); break;
break;
case SO_NO_CHECK:
case SO_NO_CHECK: v.val = sk->sk_no_check;
v.val = sk->sk_no_check; break;
break;
case SO_PRIORITY:
case SO_PRIORITY: v.val = sk->sk_priority;
v.val = sk->sk_priority; break;
break;
case SO_LINGER:
case SO_LINGER: lv = sizeof(v.ling);
lv = sizeof(v.ling); v.ling.l_onoff = !!sock_flag(sk, SOCK_LINGER);
v.ling.l_onoff = !!sock_flag(sk, SOCK_LINGER); v.ling.l_linger = sk->sk_lingertime / HZ;
v.ling.l_linger = sk->sk_lingertime / HZ; break;
break;
case SO_BSDCOMPAT:
case SO_BSDCOMPAT: sock_warn_obsolete_bsdism("getsockopt");
sock_warn_obsolete_bsdism("getsockopt"); break;
break;
case SO_TIMESTAMP:
case SO_TIMESTAMP: v.val = sock_flag(sk, SOCK_RCVTSTAMP);
v.val = sock_flag(sk, SOCK_RCVTSTAMP); break;
break;
case SO_RCVTIMEO:
case SO_RCVTIMEO: lv=sizeof(struct timeval);
lv=sizeof(struct timeval); if (sk->sk_rcvtimeo == MAX_SCHEDULE_TIMEOUT) {
if (sk->sk_rcvtimeo == MAX_SCHEDULE_TIMEOUT) { v.tm.tv_sec = 0;
v.tm.tv_sec = 0; v.tm.tv_usec = 0;
v.tm.tv_usec = 0; } else {
} else { v.tm.tv_sec = sk->sk_rcvtimeo / HZ;
v.tm.tv_sec = sk->sk_rcvtimeo / HZ; v.tm.tv_usec = ((sk->sk_rcvtimeo % HZ) * 1000000) / HZ;
v.tm.tv_usec = ((sk->sk_rcvtimeo % HZ) * 1000000) / HZ; }
} break;
break;
case SO_SNDTIMEO:
lv=sizeof(struct timeval);
if (sk->sk_sndtimeo == MAX_SCHEDULE_TIMEOUT) {
v.tm.tv_sec = 0;
v.tm.tv_usec = 0;
} else {
v.tm.tv_sec = sk->sk_sndtimeo / HZ;
v.tm.tv_usec = ((sk->sk_sndtimeo % HZ) * 1000000) / HZ;
}
break;
case SO_SNDTIMEO: case SO_RCVLOWAT:
lv=sizeof(struct timeval); v.val = sk->sk_rcvlowat;
if (sk->sk_sndtimeo == MAX_SCHEDULE_TIMEOUT) { break;
v.tm.tv_sec = 0;
v.tm.tv_usec = 0;
} else {
v.tm.tv_sec = sk->sk_sndtimeo / HZ;
v.tm.tv_usec = ((sk->sk_sndtimeo % HZ) * 1000000) / HZ;
}
break;
case SO_RCVLOWAT: case SO_SNDLOWAT:
v.val = sk->sk_rcvlowat; v.val=1;
break; break;
case SO_SNDLOWAT: case SO_PASSCRED:
v.val=1; v.val = test_bit(SOCK_PASSCRED, &sock->flags) ? 1 : 0;
break; break;
case SO_PASSCRED: case SO_PEERCRED:
v.val = test_bit(SOCK_PASSCRED, &sock->flags) ? 1 : 0; if (len > sizeof(sk->sk_peercred))
break; len = sizeof(sk->sk_peercred);
if (copy_to_user(optval, &sk->sk_peercred, len))
return -EFAULT;
goto lenout;
case SO_PEERCRED: case SO_PEERNAME:
if (len > sizeof(sk->sk_peercred)) {
len = sizeof(sk->sk_peercred); char address[128];
if (copy_to_user(optval, &sk->sk_peercred, len))
return -EFAULT; if (sock->ops->getname(sock, (struct sockaddr *)address, &lv, 2))
goto lenout; return -ENOTCONN;
if (lv < len)
case SO_PEERNAME: return -EINVAL;
{ if (copy_to_user(optval, address, len))
char address[128]; return -EFAULT;
goto lenout;
if (sock->ops->getname(sock, (struct sockaddr *)address, &lv, 2)) }
return -ENOTCONN;
if (lv < len)
return -EINVAL;
if (copy_to_user(optval, address, len))
return -EFAULT;
goto lenout;
}
/* Dubious BSD thing... Probably nobody even uses it, but /* Dubious BSD thing... Probably nobody even uses it, but
* the UNIX standard wants it for whatever reason... -DaveM * the UNIX standard wants it for whatever reason... -DaveM
*/ */
case SO_ACCEPTCONN: case SO_ACCEPTCONN:
v.val = sk->sk_state == TCP_LISTEN; v.val = sk->sk_state == TCP_LISTEN;
break; break;
case SO_PASSSEC: case SO_PASSSEC:
v.val = test_bit(SOCK_PASSSEC, &sock->flags) ? 1 : 0; v.val = test_bit(SOCK_PASSSEC, &sock->flags) ? 1 : 0;
break; break;
case SO_PEERSEC: case SO_PEERSEC:
return security_socket_getpeersec_stream(sock, optval, optlen, len); return security_socket_getpeersec_stream(sock, optval, optlen, len);
default: default:
return(-ENOPROTOOPT); return -ENOPROTOOPT;
} }
if (len > lv) if (len > lv)
len = lv; len = lv;
if (copy_to_user(optval, &v, len)) if (copy_to_user(optval, &v, len))
...@@ -1220,13 +1217,13 @@ static void __lock_sock(struct sock *sk) ...@@ -1220,13 +1217,13 @@ static void __lock_sock(struct sock *sk)
{ {
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
for(;;) { for (;;) {
prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait, prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
TASK_UNINTERRUPTIBLE); TASK_UNINTERRUPTIBLE);
spin_unlock_bh(&sk->sk_lock.slock); spin_unlock_bh(&sk->sk_lock.slock);
schedule(); schedule();
spin_lock_bh(&sk->sk_lock.slock); spin_lock_bh(&sk->sk_lock.slock);
if(!sock_owned_by_user(sk)) if (!sock_owned_by_user(sk))
break; break;
} }
finish_wait(&sk->sk_lock.wq, &wait); finish_wait(&sk->sk_lock.wq, &wait);
...@@ -1258,7 +1255,7 @@ static void __release_sock(struct sock *sk) ...@@ -1258,7 +1255,7 @@ static void __release_sock(struct sock *sk)
} while (skb != NULL); } while (skb != NULL);
bh_lock_sock(sk); bh_lock_sock(sk);
} while((skb = sk->sk_backlog.head) != NULL); } while ((skb = sk->sk_backlog.head) != NULL);
} }
/** /**
...@@ -1420,7 +1417,7 @@ static void sock_def_write_space(struct sock *sk) ...@@ -1420,7 +1417,7 @@ static void sock_def_write_space(struct sock *sk)
/* Do not wake up a writer until he can make "significant" /* Do not wake up a writer until he can make "significant"
* progress. --DaveM * progress. --DaveM
*/ */
if((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) { if ((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) {
if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
wake_up_interruptible(sk->sk_sleep); wake_up_interruptible(sk->sk_sleep);
...@@ -1482,8 +1479,7 @@ void sock_init_data(struct socket *sock, struct sock *sk) ...@@ -1482,8 +1479,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
sock_set_flag(sk, SOCK_ZAPPED); sock_set_flag(sk, SOCK_ZAPPED);
if(sock) if (sock) {
{
sk->sk_type = sock->type; sk->sk_type = sock->type;
sk->sk_sleep = &sock->wait; sk->sk_sleep = &sock->wait;
sock->sk = sk; sock->sk = sk;
......
此差异已折叠。
...@@ -1292,7 +1292,7 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) ...@@ -1292,7 +1292,7 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)
int err, fput_needed; int err, fput_needed;
sock = sockfd_lookup_light(fd, &err, &fput_needed); sock = sockfd_lookup_light(fd, &err, &fput_needed);
if(sock) { if (sock) {
err = move_addr_to_kernel(umyaddr, addrlen, address); err = move_addr_to_kernel(umyaddr, addrlen, address);
if (err >= 0) { if (err >= 0) {
err = security_socket_bind(sock, err = security_socket_bind(sock,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册