X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fcore%2Fsock.c;h=f48c11657435ff4d212255a78d2b277a119add35;hb=4065986367472bacfe20631fc53fd959b2f32aa9;hp=3ca5f8d4c0197b54366955549aa56bf1c61fe86b;hpb=763df31ecf1a95fe43ee3a6b238a83e4a083907e;p=linux-2.6.git diff --git a/net/core/sock.c b/net/core/sock.c index 3ca5f8d4c..f48c11657 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -431,6 +431,18 @@ set_sndbuf: } goto set_sndbuf; + case SO_SETXID: + if (current->xid) { + ret = -EPERM; + break; + } + if (val < 0 || val > MAX_S_CONTEXT) { + ret = -EINVAL; + break; + } + sk->sk_xid = val; + break; + case SO_RCVBUF: /* Don't error on this BSD doesn't and if you think about it this is right. Otherwise apps have to @@ -553,7 +565,7 @@ set_rcvbuf: char devname[IFNAMSIZ]; /* Sorry... */ - if (!capable(CAP_NET_RAW)) { + if (!nx_capable(CAP_NET_RAW, NXC_RAW_SOCKET)) { ret = -EPERM; break; } @@ -764,6 +776,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname, len = sizeof(sk->sk_peercred); if (copy_to_user(optval, &sk->sk_peercred, len)) return -EFAULT; + goto lenout; case SO_PEERNAME: