diff mbox series

libceph: don't pass result into ac->ops->handle_reply()

Message ID 20210623151247.18734-1-idryomov@gmail.com
State New
Headers show
Series libceph: don't pass result into ac->ops->handle_reply() | expand

Commit Message

Ilya Dryomov June 23, 2021, 3:12 p.m. UTC
There is no result to pass in msgr2 case because authentication
failures are reported through auth_bad_method frame and in MAuth
case an error is returned immediately.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
---
 include/linux/ceph/auth.h |  2 +-
 net/ceph/auth.c           | 15 ++++++++++-----
 net/ceph/auth_none.c      |  4 ++--
 net/ceph/auth_x.c         |  6 ++----
 4 files changed, 15 insertions(+), 12 deletions(-)

Comments

Jeff Layton June 24, 2021, 4:44 p.m. UTC | #1
On Wed, 2021-06-23 at 17:12 +0200, Ilya Dryomov wrote:
> There is no result to pass in msgr2 case because authentication
> failures are reported through auth_bad_method frame and in MAuth
> case an error is returned immediately.
> 
> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
> ---
>  include/linux/ceph/auth.h |  2 +-
>  net/ceph/auth.c           | 15 ++++++++++-----
>  net/ceph/auth_none.c      |  4 ++--
>  net/ceph/auth_x.c         |  6 ++----
>  4 files changed, 15 insertions(+), 12 deletions(-)
> 
> diff --git a/include/linux/ceph/auth.h b/include/linux/ceph/auth.h
> index 71b5d481c653..39425e2f7cb2 100644
> --- a/include/linux/ceph/auth.h
> +++ b/include/linux/ceph/auth.h
> @@ -50,7 +50,7 @@ struct ceph_auth_client_ops {
>  	 * another request.
>  	 */
>  	int (*build_request)(struct ceph_auth_client *ac, void *buf, void *end);
> -	int (*handle_reply)(struct ceph_auth_client *ac, int result,
> +	int (*handle_reply)(struct ceph_auth_client *ac,
>  			    void *buf, void *end, u8 *session_key,
>  			    int *session_key_len, u8 *con_secret,
>  			    int *con_secret_len);
> diff --git a/net/ceph/auth.c b/net/ceph/auth.c
> index b824a48a4c47..d07c8cd6cb46 100644
> --- a/net/ceph/auth.c
> +++ b/net/ceph/auth.c
> @@ -255,14 +255,19 @@ int ceph_handle_auth_reply(struct ceph_auth_client *ac,
>  		ac->negotiating = false;
>  	}
>  
> -	ret = ac->ops->handle_reply(ac, result, payload, payload_end,
> +	if (result) {
> +		pr_err("auth protocol '%s' mauth authentication failed: %d\n",
> +		       ceph_auth_proto_name(ac->protocol), result);
> +		ret = result;
> +		goto out;
> +	}
> +
> +	ret = ac->ops->handle_reply(ac, payload, payload_end,
>  				    NULL, NULL, NULL, NULL);
>  	if (ret == -EAGAIN) {
>  		ret = build_request(ac, true, reply_buf, reply_len);
>  		goto out;
>  	} else if (ret) {
> -		pr_err("auth protocol '%s' mauth authentication failed: %d\n",
> -		       ceph_auth_proto_name(ac->protocol), result);
>  		goto out;
>  	}
>  
> @@ -475,7 +480,7 @@ int ceph_auth_handle_reply_more(struct ceph_auth_client *ac, void *reply,
>  	int ret;
>  
>  	mutex_lock(&ac->mutex);
> -	ret = ac->ops->handle_reply(ac, 0, reply, reply + reply_len,
> +	ret = ac->ops->handle_reply(ac, reply, reply + reply_len,
>  				    NULL, NULL, NULL, NULL);
>  	if (ret == -EAGAIN)
>  		ret = build_request(ac, false, buf, buf_len);
> @@ -493,7 +498,7 @@ int ceph_auth_handle_reply_done(struct ceph_auth_client *ac,
>  	int ret;
>  
>  	mutex_lock(&ac->mutex);
> -	ret = ac->ops->handle_reply(ac, 0, reply, reply + reply_len,
> +	ret = ac->ops->handle_reply(ac, reply, reply + reply_len,
>  				    session_key, session_key_len,
>  				    con_secret, con_secret_len);
>  	if (!ret)
> diff --git a/net/ceph/auth_none.c b/net/ceph/auth_none.c
> index dbf22df10a85..533a2d85dbb9 100644
> --- a/net/ceph/auth_none.c
> +++ b/net/ceph/auth_none.c
> @@ -69,7 +69,7 @@ static int build_request(struct ceph_auth_client *ac, void *buf, void *end)
>   * the generic auth code decode the global_id, and we carry no actual
>   * authenticate state, so nothing happens here.
>   */
> -static int handle_reply(struct ceph_auth_client *ac, int result,
> +static int handle_reply(struct ceph_auth_client *ac,
>  			void *buf, void *end, u8 *session_key,
>  			int *session_key_len, u8 *con_secret,
>  			int *con_secret_len)
> @@ -77,7 +77,7 @@ static int handle_reply(struct ceph_auth_client *ac, int result,
>  	struct ceph_auth_none_info *xi = ac->private;
>  
>  	xi->starting = false;
> -	return result;
> +	return 0;
>  }
>  
>  static void ceph_auth_none_destroy_authorizer(struct ceph_authorizer *a)
> diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
> index 79641c4afee9..cab99c5581b0 100644
> --- a/net/ceph/auth_x.c
> +++ b/net/ceph/auth_x.c
> @@ -661,7 +661,7 @@ static int handle_auth_session_key(struct ceph_auth_client *ac,
>  	return -EINVAL;
>  }
>  
> -static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result,
> +static int ceph_x_handle_reply(struct ceph_auth_client *ac,
>  			       void *buf, void *end,
>  			       u8 *session_key, int *session_key_len,
>  			       u8 *con_secret, int *con_secret_len)
> @@ -669,13 +669,11 @@ static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result,
>  	struct ceph_x_info *xi = ac->private;
>  	struct ceph_x_ticket_handler *th;
>  	int len = end - buf;
> +	int result;
>  	void *p;
>  	int op;
>  	int ret;
>  
> -	if (result)
> -		return result;  /* XXX hmm? */
> -
>  	if (xi->starting) {
>  		/* it's a hello */
>  		struct ceph_x_server_challenge *sc = buf;

Nice cleanup.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
diff mbox series

Patch

diff --git a/include/linux/ceph/auth.h b/include/linux/ceph/auth.h
index 71b5d481c653..39425e2f7cb2 100644
--- a/include/linux/ceph/auth.h
+++ b/include/linux/ceph/auth.h
@@ -50,7 +50,7 @@  struct ceph_auth_client_ops {
 	 * another request.
 	 */
 	int (*build_request)(struct ceph_auth_client *ac, void *buf, void *end);
-	int (*handle_reply)(struct ceph_auth_client *ac, int result,
+	int (*handle_reply)(struct ceph_auth_client *ac,
 			    void *buf, void *end, u8 *session_key,
 			    int *session_key_len, u8 *con_secret,
 			    int *con_secret_len);
diff --git a/net/ceph/auth.c b/net/ceph/auth.c
index b824a48a4c47..d07c8cd6cb46 100644
--- a/net/ceph/auth.c
+++ b/net/ceph/auth.c
@@ -255,14 +255,19 @@  int ceph_handle_auth_reply(struct ceph_auth_client *ac,
 		ac->negotiating = false;
 	}
 
-	ret = ac->ops->handle_reply(ac, result, payload, payload_end,
+	if (result) {
+		pr_err("auth protocol '%s' mauth authentication failed: %d\n",
+		       ceph_auth_proto_name(ac->protocol), result);
+		ret = result;
+		goto out;
+	}
+
+	ret = ac->ops->handle_reply(ac, payload, payload_end,
 				    NULL, NULL, NULL, NULL);
 	if (ret == -EAGAIN) {
 		ret = build_request(ac, true, reply_buf, reply_len);
 		goto out;
 	} else if (ret) {
-		pr_err("auth protocol '%s' mauth authentication failed: %d\n",
-		       ceph_auth_proto_name(ac->protocol), result);
 		goto out;
 	}
 
@@ -475,7 +480,7 @@  int ceph_auth_handle_reply_more(struct ceph_auth_client *ac, void *reply,
 	int ret;
 
 	mutex_lock(&ac->mutex);
-	ret = ac->ops->handle_reply(ac, 0, reply, reply + reply_len,
+	ret = ac->ops->handle_reply(ac, reply, reply + reply_len,
 				    NULL, NULL, NULL, NULL);
 	if (ret == -EAGAIN)
 		ret = build_request(ac, false, buf, buf_len);
@@ -493,7 +498,7 @@  int ceph_auth_handle_reply_done(struct ceph_auth_client *ac,
 	int ret;
 
 	mutex_lock(&ac->mutex);
-	ret = ac->ops->handle_reply(ac, 0, reply, reply + reply_len,
+	ret = ac->ops->handle_reply(ac, reply, reply + reply_len,
 				    session_key, session_key_len,
 				    con_secret, con_secret_len);
 	if (!ret)
diff --git a/net/ceph/auth_none.c b/net/ceph/auth_none.c
index dbf22df10a85..533a2d85dbb9 100644
--- a/net/ceph/auth_none.c
+++ b/net/ceph/auth_none.c
@@ -69,7 +69,7 @@  static int build_request(struct ceph_auth_client *ac, void *buf, void *end)
  * the generic auth code decode the global_id, and we carry no actual
  * authenticate state, so nothing happens here.
  */
-static int handle_reply(struct ceph_auth_client *ac, int result,
+static int handle_reply(struct ceph_auth_client *ac,
 			void *buf, void *end, u8 *session_key,
 			int *session_key_len, u8 *con_secret,
 			int *con_secret_len)
@@ -77,7 +77,7 @@  static int handle_reply(struct ceph_auth_client *ac, int result,
 	struct ceph_auth_none_info *xi = ac->private;
 
 	xi->starting = false;
-	return result;
+	return 0;
 }
 
 static void ceph_auth_none_destroy_authorizer(struct ceph_authorizer *a)
diff --git a/net/ceph/auth_x.c b/net/ceph/auth_x.c
index 79641c4afee9..cab99c5581b0 100644
--- a/net/ceph/auth_x.c
+++ b/net/ceph/auth_x.c
@@ -661,7 +661,7 @@  static int handle_auth_session_key(struct ceph_auth_client *ac,
 	return -EINVAL;
 }
 
-static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result,
+static int ceph_x_handle_reply(struct ceph_auth_client *ac,
 			       void *buf, void *end,
 			       u8 *session_key, int *session_key_len,
 			       u8 *con_secret, int *con_secret_len)
@@ -669,13 +669,11 @@  static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result,
 	struct ceph_x_info *xi = ac->private;
 	struct ceph_x_ticket_handler *th;
 	int len = end - buf;
+	int result;
 	void *p;
 	int op;
 	int ret;
 
-	if (result)
-		return result;  /* XXX hmm? */
-
 	if (xi->starting) {
 		/* it's a hello */
 		struct ceph_x_server_challenge *sc = buf;