From 272fe31225f788b95c91d35481c58ead8afa351d Mon Sep 17 00:00:00 2001 From: Mark Huang Date: Wed, 20 Oct 2004 02:33:15 +0000 Subject: [PATCH] - 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)); --- net/core/sock.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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) -- 2.43.0