rxrpc: Fix exclusive connection handling
"Exclusive connections" are meant to be used for a single client call and then scrapped. The idea is to limit the use of the negotiated security context. The current code, however, isn't doing this: it is instead restricting the socket to a single virtual connection and doing all the calls over that. This is changed such that the socket no longer maintains a special virtual connection over which it will do all the calls, but rather gets a new one each time a new exclusive call is made. Further, using a socket option for this is a poor choice. It should be done on sendmsg with a control message marker instead so that calls can be marked exclusive individually. To that end, add RXRPC_EXCLUSIVE_CALL which, if passed to sendmsg() as a control message element, will cause the call to be done on an single-use connection. The socket option (RXRPC_EXCLUSIVE_CONNECTION) still exists and, if set, will override any lack of RXRPC_EXCLUSIVE_CALL being specified so that programs using the setsockopt() will appear to work the same. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -35,7 +35,7 @@ struct sockaddr_rxrpc {
|
||||
*/
|
||||
#define RXRPC_SECURITY_KEY 1 /* [clnt] set client security key */
|
||||
#define RXRPC_SECURITY_KEYRING 2 /* [srvr] set ring of server security keys */
|
||||
#define RXRPC_EXCLUSIVE_CONNECTION 3 /* [clnt] use exclusive RxRPC connection */
|
||||
#define RXRPC_EXCLUSIVE_CONNECTION 3 /* Deprecated; use RXRPC_EXCLUSIVE_CALL instead */
|
||||
#define RXRPC_MIN_SECURITY_LEVEL 4 /* minimum security level */
|
||||
|
||||
/*
|
||||
@@ -52,6 +52,7 @@ struct sockaddr_rxrpc {
|
||||
#define RXRPC_LOCAL_ERROR 7 /* -r: local error generated [terminal] */
|
||||
#define RXRPC_NEW_CALL 8 /* -r: [Service] new incoming call notification */
|
||||
#define RXRPC_ACCEPT 9 /* s-: [Service] accept request */
|
||||
#define RXRPC_EXCLUSIVE_CALL 10 /* s-: Call should be on exclusive connection */
|
||||
|
||||
/*
|
||||
* RxRPC security levels
|
||||
|
Reference in New Issue
Block a user