afs: Fix the non-encryption of calls
authorDavid Howells <dhowells@redhat.com>
Thu, 10 May 2018 22:10:40 +0000 (23:10 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Jun 2018 19:02:59 +0000 (04:02 +0900)
[ Upstream commit 4776cab43fd3111618112737a257dc3ef368eddd ]

Some AFS servers refuse to accept unencrypted traffic, so can't be accessed
with kAFS.  Set the AF_RXRPC security level to encrypt client calls to deal
with this.

Note that incoming service calls are set by the remote client and so aren't
affected by this.

This requires an AF_RXRPC patch to pass the value set by setsockopt to calls
begun by the kernel.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/afs/rxrpc.c

index 9f715c3edcf967eeb9dd437f23174d838fefa42c..ccc9c708a860a5d5c405a7198e9a29110f4dc390 100644 (file)
@@ -55,6 +55,7 @@ int afs_open_socket(void)
 {
        struct sockaddr_rxrpc srx;
        struct socket *socket;
+       unsigned int min_level;
        int ret;
 
        _enter("");
@@ -80,6 +81,12 @@ int afs_open_socket(void)
        memset(&srx.transport.sin.sin_addr, 0,
               sizeof(srx.transport.sin.sin_addr));
 
+       min_level = RXRPC_SECURITY_ENCRYPT;
+       ret = kernel_setsockopt(socket, SOL_RXRPC, RXRPC_MIN_SECURITY_LEVEL,
+                               (void *)&min_level, sizeof(min_level));
+       if (ret < 0)
+               goto error_2;
+
        ret = kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx));
        if (ret < 0)
                goto error_2;