- PL2525 fix: implement SO_SETXID (reset the context ID of an existing
authorMark Huang <mlhuang@cs.princeton.edu>
Wed, 20 Oct 2004 02:33:15 +0000 (02:33 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Wed, 20 Oct 2004 02:33:15 +0000 (02:33 +0000)
  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

index d5b2d91..2663979 100644 (file)
@@ -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)