From: Mark Huang Date: Wed, 20 Oct 2004 02:33:15 +0000 (+0000) Subject: - PL2525 fix: implement SO_SETXID (reset the context ID of an existing X-Git-Tag: before-enable-kexec-patch~35 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=272fe31225f788b95c91d35481c58ead8afa351d;p=linux-2.6.git - PL2525 fix: implement SO_SETXID (reset the context ID of an existing socket). Callable by root context only. To avoid having to register a new sockopt number, #define SO_SETXID to be SO_PASSCRED (which is not usually callable by setsockopt()): #if !defined(SO_SETXID) #define SO_SETXID SO_PASSCRED #endif int xid; setsockopt(fd, SOL_SOCKET, SO_SETXID, &xid, sizeof(xid)); --- diff --git a/net/core/sock.c b/net/core/sock.c index d5b2d9105..266397922 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -331,6 +331,18 @@ int sock_setsockopt(struct socket *sock, int level, int optname, clear_bit(SOCK_PASS_CRED, &sock->flags); break; + 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_TIMESTAMP: sk->sk_rcvtstamp = valbool; if (valbool)