Loading Documentation/networking/rxrpc.txt +9 −0 Original line number Original line Diff line number Diff line Loading @@ -406,6 +406,10 @@ calls, to invoke certain actions and to report certain conditions. These are: future communication to that server and RXRPC_UPGRADE_SERVICE should no future communication to that server and RXRPC_UPGRADE_SERVICE should no longer be set. longer be set. The symbol RXRPC__SUPPORTED is defined as one more than the highest control message type supported. At run time this can be queried by means of the RXRPC_SUPPORTED_CMSG socket option (see below). ============== ============== SOCKET OPTIONS SOCKET OPTIONS Loading Loading @@ -459,6 +463,11 @@ AF_RXRPC sockets support a few socket options at the SOL_RXRPC level: must point to an array of two unsigned short ints. The first is the must point to an array of two unsigned short ints. The first is the service ID to upgrade from and the second the service ID to upgrade to. service ID to upgrade from and the second the service ID to upgrade to. (*) RXRPC_SUPPORTED_CMSG This is a read-only option that writes an int into the buffer indicating the highest control message type supported. ======== ======== SECURITY SECURITY Loading include/linux/rxrpc.h +14 −10 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ struct sockaddr_rxrpc { #define RXRPC_EXCLUSIVE_CONNECTION 3 /* Deprecated; use RXRPC_EXCLUSIVE_CALL instead */ #define RXRPC_EXCLUSIVE_CONNECTION 3 /* Deprecated; use RXRPC_EXCLUSIVE_CALL instead */ #define RXRPC_MIN_SECURITY_LEVEL 4 /* minimum security level */ #define RXRPC_MIN_SECURITY_LEVEL 4 /* minimum security level */ #define RXRPC_UPGRADEABLE_SERVICE 5 /* Upgrade service[0] -> service[1] */ #define RXRPC_UPGRADEABLE_SERVICE 5 /* Upgrade service[0] -> service[1] */ #define RXRPC_SUPPORTED_CMSG 6 /* Get highest supported control message type */ /* /* * RxRPC control messages * RxRPC control messages Loading @@ -45,16 +46,19 @@ struct sockaddr_rxrpc { * - terminal messages mean that a user call ID tag can be recycled * - terminal messages mean that a user call ID tag can be recycled * - s/r/- indicate whether these are applicable to sendmsg() and/or recvmsg() * - s/r/- indicate whether these are applicable to sendmsg() and/or recvmsg() */ */ #define RXRPC_USER_CALL_ID 1 /* sr: user call ID specifier */ enum rxrpc_cmsg_type { #define RXRPC_ABORT 2 /* sr: abort request / notification [terminal] */ RXRPC_USER_CALL_ID = 1, /* sr: user call ID specifier */ #define RXRPC_ACK 3 /* -r: [Service] RPC op final ACK received [terminal] */ RXRPC_ABORT = 2, /* sr: abort request / notification [terminal] */ #define RXRPC_NET_ERROR 5 /* -r: network error received [terminal] */ RXRPC_ACK = 3, /* -r: [Service] RPC op final ACK received [terminal] */ #define RXRPC_BUSY 6 /* -r: server busy received [terminal] */ RXRPC_NET_ERROR = 5, /* -r: network error received [terminal] */ #define RXRPC_LOCAL_ERROR 7 /* -r: local error generated [terminal] */ RXRPC_BUSY = 6, /* -r: server busy received [terminal] */ #define RXRPC_NEW_CALL 8 /* -r: [Service] new incoming call notification */ RXRPC_LOCAL_ERROR = 7, /* -r: local error generated [terminal] */ #define RXRPC_ACCEPT 9 /* s-: [Service] accept request */ RXRPC_NEW_CALL = 8, /* -r: [Service] new incoming call notification */ #define RXRPC_EXCLUSIVE_CALL 10 /* s-: Call should be on exclusive connection */ RXRPC_ACCEPT = 9, /* s-: [Service] accept request */ #define RXRPC_UPGRADE_SERVICE 11 /* s-: Request service upgrade for client call */ RXRPC_EXCLUSIVE_CALL = 10, /* s-: Call should be on exclusive connection */ RXRPC_UPGRADE_SERVICE = 11, /* s-: Request service upgrade for client call */ RXRPC__SUPPORTED }; /* /* * RxRPC security levels * RxRPC security levels Loading net/rxrpc/af_rxrpc.c +29 −1 Original line number Original line Diff line number Diff line Loading @@ -581,6 +581,34 @@ static int rxrpc_setsockopt(struct socket *sock, int level, int optname, return ret; return ret; } } /* * Get socket options. */ static int rxrpc_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *_optlen) { int optlen; if (level != SOL_RXRPC) return -EOPNOTSUPP; if (get_user(optlen, _optlen)) return -EFAULT; switch (optname) { case RXRPC_SUPPORTED_CMSG: if (optlen < sizeof(int)) return -ETOOSMALL; if (put_user(RXRPC__SUPPORTED - 1, (int __user *)optval) || put_user(sizeof(int), _optlen)) return -EFAULT; return 0; default: return -EOPNOTSUPP; } } /* /* * permit an RxRPC socket to be polled * permit an RxRPC socket to be polled */ */ Loading Loading @@ -784,7 +812,7 @@ static const struct proto_ops rxrpc_rpc_ops = { .listen = rxrpc_listen, .listen = rxrpc_listen, .shutdown = rxrpc_shutdown, .shutdown = rxrpc_shutdown, .setsockopt = rxrpc_setsockopt, .setsockopt = rxrpc_setsockopt, .getsockopt = sock_no_getsockopt, .getsockopt = rxrpc_getsockopt, .sendmsg = rxrpc_sendmsg, .sendmsg = rxrpc_sendmsg, .recvmsg = rxrpc_recvmsg, .recvmsg = rxrpc_recvmsg, .mmap = sock_no_mmap, .mmap = sock_no_mmap, Loading Loading
Documentation/networking/rxrpc.txt +9 −0 Original line number Original line Diff line number Diff line Loading @@ -406,6 +406,10 @@ calls, to invoke certain actions and to report certain conditions. These are: future communication to that server and RXRPC_UPGRADE_SERVICE should no future communication to that server and RXRPC_UPGRADE_SERVICE should no longer be set. longer be set. The symbol RXRPC__SUPPORTED is defined as one more than the highest control message type supported. At run time this can be queried by means of the RXRPC_SUPPORTED_CMSG socket option (see below). ============== ============== SOCKET OPTIONS SOCKET OPTIONS Loading Loading @@ -459,6 +463,11 @@ AF_RXRPC sockets support a few socket options at the SOL_RXRPC level: must point to an array of two unsigned short ints. The first is the must point to an array of two unsigned short ints. The first is the service ID to upgrade from and the second the service ID to upgrade to. service ID to upgrade from and the second the service ID to upgrade to. (*) RXRPC_SUPPORTED_CMSG This is a read-only option that writes an int into the buffer indicating the highest control message type supported. ======== ======== SECURITY SECURITY Loading
include/linux/rxrpc.h +14 −10 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ struct sockaddr_rxrpc { #define RXRPC_EXCLUSIVE_CONNECTION 3 /* Deprecated; use RXRPC_EXCLUSIVE_CALL instead */ #define RXRPC_EXCLUSIVE_CONNECTION 3 /* Deprecated; use RXRPC_EXCLUSIVE_CALL instead */ #define RXRPC_MIN_SECURITY_LEVEL 4 /* minimum security level */ #define RXRPC_MIN_SECURITY_LEVEL 4 /* minimum security level */ #define RXRPC_UPGRADEABLE_SERVICE 5 /* Upgrade service[0] -> service[1] */ #define RXRPC_UPGRADEABLE_SERVICE 5 /* Upgrade service[0] -> service[1] */ #define RXRPC_SUPPORTED_CMSG 6 /* Get highest supported control message type */ /* /* * RxRPC control messages * RxRPC control messages Loading @@ -45,16 +46,19 @@ struct sockaddr_rxrpc { * - terminal messages mean that a user call ID tag can be recycled * - terminal messages mean that a user call ID tag can be recycled * - s/r/- indicate whether these are applicable to sendmsg() and/or recvmsg() * - s/r/- indicate whether these are applicable to sendmsg() and/or recvmsg() */ */ #define RXRPC_USER_CALL_ID 1 /* sr: user call ID specifier */ enum rxrpc_cmsg_type { #define RXRPC_ABORT 2 /* sr: abort request / notification [terminal] */ RXRPC_USER_CALL_ID = 1, /* sr: user call ID specifier */ #define RXRPC_ACK 3 /* -r: [Service] RPC op final ACK received [terminal] */ RXRPC_ABORT = 2, /* sr: abort request / notification [terminal] */ #define RXRPC_NET_ERROR 5 /* -r: network error received [terminal] */ RXRPC_ACK = 3, /* -r: [Service] RPC op final ACK received [terminal] */ #define RXRPC_BUSY 6 /* -r: server busy received [terminal] */ RXRPC_NET_ERROR = 5, /* -r: network error received [terminal] */ #define RXRPC_LOCAL_ERROR 7 /* -r: local error generated [terminal] */ RXRPC_BUSY = 6, /* -r: server busy received [terminal] */ #define RXRPC_NEW_CALL 8 /* -r: [Service] new incoming call notification */ RXRPC_LOCAL_ERROR = 7, /* -r: local error generated [terminal] */ #define RXRPC_ACCEPT 9 /* s-: [Service] accept request */ RXRPC_NEW_CALL = 8, /* -r: [Service] new incoming call notification */ #define RXRPC_EXCLUSIVE_CALL 10 /* s-: Call should be on exclusive connection */ RXRPC_ACCEPT = 9, /* s-: [Service] accept request */ #define RXRPC_UPGRADE_SERVICE 11 /* s-: Request service upgrade for client call */ RXRPC_EXCLUSIVE_CALL = 10, /* s-: Call should be on exclusive connection */ RXRPC_UPGRADE_SERVICE = 11, /* s-: Request service upgrade for client call */ RXRPC__SUPPORTED }; /* /* * RxRPC security levels * RxRPC security levels Loading
net/rxrpc/af_rxrpc.c +29 −1 Original line number Original line Diff line number Diff line Loading @@ -581,6 +581,34 @@ static int rxrpc_setsockopt(struct socket *sock, int level, int optname, return ret; return ret; } } /* * Get socket options. */ static int rxrpc_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *_optlen) { int optlen; if (level != SOL_RXRPC) return -EOPNOTSUPP; if (get_user(optlen, _optlen)) return -EFAULT; switch (optname) { case RXRPC_SUPPORTED_CMSG: if (optlen < sizeof(int)) return -ETOOSMALL; if (put_user(RXRPC__SUPPORTED - 1, (int __user *)optval) || put_user(sizeof(int), _optlen)) return -EFAULT; return 0; default: return -EOPNOTSUPP; } } /* /* * permit an RxRPC socket to be polled * permit an RxRPC socket to be polled */ */ Loading Loading @@ -784,7 +812,7 @@ static const struct proto_ops rxrpc_rpc_ops = { .listen = rxrpc_listen, .listen = rxrpc_listen, .shutdown = rxrpc_shutdown, .shutdown = rxrpc_shutdown, .setsockopt = rxrpc_setsockopt, .setsockopt = rxrpc_setsockopt, .getsockopt = sock_no_getsockopt, .getsockopt = rxrpc_getsockopt, .sendmsg = rxrpc_sendmsg, .sendmsg = rxrpc_sendmsg, .recvmsg = rxrpc_recvmsg, .recvmsg = rxrpc_recvmsg, .mmap = sock_no_mmap, .mmap = sock_no_mmap, Loading