ceph: fix get_ticket_handler() error handling
Subsystems (2)
PATCH 1/1 ceph: fix get_ticket_handler() error handling
get_ticket_handler() returns a valid pointer or it returns ERR_PTR(-ENOMEM) if kzalloc() fails.
Signed-off-by Dan Carpenter <[email protected]>
fs/ceph/auth_x.c +9 -6
@@ -376,7 +376,7 @@ static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed) th =get_ticket_handler (ac, service); -if (!th) { +if (IS_ERR (th)) { *pneed |= service;continue ; }
@@ -399,6 +399,9 @@ static int ceph_x_build_request(struct ceph_auth_client *ac, struct ceph_x_ticket_handler *th get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH); +if (IS_ERR (th)) +return PTR_ERR (th); +ceph_x_validate_tickets (ac, &need); dout("build_request want %x have %x need %x\n",
@@ -450,7 +453,6 @@ static int ceph_x_build_request(struct ceph_auth_client *ac,return -ERANGE ; head->op =cpu_to_le16 (CEPHX_GET_PRINCIPAL_SESSION_KEY ); -BUG_ON (!th); ret =ceph_x_build_authorizer (ac, th, &xi->auth_authorizer);if (ret)return ret;
@@ -505,7 +507,8 @@ static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result,case CEPHX_GET_PRINCIPAL_SESSION_KEY : th =get_ticket_handler (ac,CEPH_ENTITY_TYPE_AUTH ); -BUG_ON (!th); +if (IS_ERR (th)) +return PTR_ERR (th); ret =ceph_x_proc_ticket_reply (ac, &th->session_key, buf +sizeof (*head), end);break ;
@@ -563,8 +566,8 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac,void *end = p +sizeof (au->reply_buf); th =get_ticket_handler (ac, au->service); -if (!th) -return -EIO ;/* hrm! */ +if (IS_ERR (th)) +return PTR_ERR (th); ret =ceph_x_decrypt (&th->session_key, &p, end, &reply,sizeof (reply));if (ret <0 )return ret;
@@ -626,7 +629,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,struct ceph_x_ticket_handler *th; th =get_ticket_handler (ac, peer_type); -if (th && !IS_ERR (th)) +if (!IS_ERR (th))remove_ticket_handler (ac, th); }
Sage Weil
AppliedApplied, thanks!
sage
Quoted 72 lines · Dan Carpenter
get_ticket_handler()returns a valid pointer or it returnsERR_PTR(-ENOMEM)ifkzalloc()fails.Signed-off-by Dan Carpenter <[email protected]>fs/ceph/auth_x.c +9
-7@@ -376,7 +376,7 @@ static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed) th =get_ticket_handler (ac, service); -if (!th) { +if (IS_ERR (th)) { *pneed |= service;continue ; }@@ -399,6 +399,9 @@ static int ceph_x_build_request(struct ceph_auth_client *ac,struct ceph_x_ticket_handler *th =get_ticket_handler (ac,CEPH_ENTITY_TYPE_AUTH ); +if (IS_ERR (th)) +return PTR_ERR (th); +ceph_x_validate_tickets (ac, &need); dout("build_request want %x have %x need %x\n",@@ -450,7 +453,6 @@ static int ceph_x_build_request(struct ceph_auth_client *ac,return -ERANGE ; head->op =cpu_to_le16 (CEPHX_GET_PRINCIPAL_SESSION_KEY ); -BUG_ON (!th); ret =ceph_x_build_authorizer (ac, th, &xi->auth_authorizer);if (ret)return ret;@@ -505,7 +507,8 @@ static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result,case CEPHX_GET_PRINCIPAL_SESSION_KEY : th =get_ticket_handler (ac,CEPH_ENTITY_TYPE_AUTH ); -BUG_ON (!th); +if (IS_ERR (th)) +return PTR_ERR (th); ret =ceph_x_proc_ticket_reply (ac, &th->session_key, buf +sizeof (*head), end);break ;@@ -563,8 +566,8 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac,void *end = p +sizeof (au->reply_buf); th =get_ticket_handler (ac, au->service); -if (!th) -return -EIO ;/* hrm! */ +if (IS_ERR (th)) +return PTR_ERR (th); ret =ceph_x_decrypt (&th->session_key, &p, end, &reply,sizeof (reply));if (ret <0 )return ret;@@ -626,7 +629,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac,struct ceph_x_ticket_handler *th; th =get_ticket_handler (ac, peer_type); -if (th && !IS_ERR (th)) +if (!IS_ERR (th))remove_ticket_handler (ac, th); } --To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html