diff options
Diffstat (limited to 'fs/ceph/auth_x.c')
| -rw-r--r-- | fs/ceph/auth_x.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/fs/ceph/auth_x.c b/fs/ceph/auth_x.c index 582e0b2caf8a..a2d002cbdec2 100644 --- a/fs/ceph/auth_x.c +++ b/fs/ceph/auth_x.c | |||
| @@ -376,7 +376,7 @@ static void ceph_x_validate_tickets(struct ceph_auth_client *ac, int *pneed) | |||
| 376 | 376 | ||
| 377 | th = get_ticket_handler(ac, service); | 377 | th = get_ticket_handler(ac, service); |
| 378 | 378 | ||
| 379 | if (!th) { | 379 | if (IS_ERR(th)) { |
| 380 | *pneed |= service; | 380 | *pneed |= service; |
| 381 | continue; | 381 | continue; |
| 382 | } | 382 | } |
| @@ -399,6 +399,9 @@ static int ceph_x_build_request(struct ceph_auth_client *ac, | |||
| 399 | struct ceph_x_ticket_handler *th = | 399 | struct ceph_x_ticket_handler *th = |
| 400 | get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH); | 400 | get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH); |
| 401 | 401 | ||
| 402 | if (IS_ERR(th)) | ||
| 403 | return PTR_ERR(th); | ||
| 404 | |||
| 402 | ceph_x_validate_tickets(ac, &need); | 405 | ceph_x_validate_tickets(ac, &need); |
| 403 | 406 | ||
| 404 | dout("build_request want %x have %x need %x\n", | 407 | 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, | |||
| 450 | return -ERANGE; | 453 | return -ERANGE; |
| 451 | head->op = cpu_to_le16(CEPHX_GET_PRINCIPAL_SESSION_KEY); | 454 | head->op = cpu_to_le16(CEPHX_GET_PRINCIPAL_SESSION_KEY); |
| 452 | 455 | ||
| 453 | BUG_ON(!th); | ||
| 454 | ret = ceph_x_build_authorizer(ac, th, &xi->auth_authorizer); | 456 | ret = ceph_x_build_authorizer(ac, th, &xi->auth_authorizer); |
| 455 | if (ret) | 457 | if (ret) |
| 456 | return ret; | 458 | return ret; |
| @@ -505,7 +507,8 @@ static int ceph_x_handle_reply(struct ceph_auth_client *ac, int result, | |||
| 505 | 507 | ||
| 506 | case CEPHX_GET_PRINCIPAL_SESSION_KEY: | 508 | case CEPHX_GET_PRINCIPAL_SESSION_KEY: |
| 507 | th = get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH); | 509 | th = get_ticket_handler(ac, CEPH_ENTITY_TYPE_AUTH); |
| 508 | BUG_ON(!th); | 510 | if (IS_ERR(th)) |
| 511 | return PTR_ERR(th); | ||
| 509 | ret = ceph_x_proc_ticket_reply(ac, &th->session_key, | 512 | ret = ceph_x_proc_ticket_reply(ac, &th->session_key, |
| 510 | buf + sizeof(*head), end); | 513 | buf + sizeof(*head), end); |
| 511 | break; | 514 | break; |
| @@ -563,8 +566,8 @@ static int ceph_x_verify_authorizer_reply(struct ceph_auth_client *ac, | |||
| 563 | void *end = p + sizeof(au->reply_buf); | 566 | void *end = p + sizeof(au->reply_buf); |
| 564 | 567 | ||
| 565 | th = get_ticket_handler(ac, au->service); | 568 | th = get_ticket_handler(ac, au->service); |
| 566 | if (!th) | 569 | if (IS_ERR(th)) |
| 567 | return -EIO; /* hrm! */ | 570 | return PTR_ERR(th); |
| 568 | ret = ceph_x_decrypt(&th->session_key, &p, end, &reply, sizeof(reply)); | 571 | ret = ceph_x_decrypt(&th->session_key, &p, end, &reply, sizeof(reply)); |
| 569 | if (ret < 0) | 572 | if (ret < 0) |
| 570 | return ret; | 573 | return ret; |
| @@ -626,7 +629,7 @@ static void ceph_x_invalidate_authorizer(struct ceph_auth_client *ac, | |||
| 626 | struct ceph_x_ticket_handler *th; | 629 | struct ceph_x_ticket_handler *th; |
| 627 | 630 | ||
| 628 | th = get_ticket_handler(ac, peer_type); | 631 | th = get_ticket_handler(ac, peer_type); |
| 629 | if (th && !IS_ERR(th)) | 632 | if (!IS_ERR(th)) |
| 630 | remove_ticket_handler(ac, th); | 633 | remove_ticket_handler(ac, th); |
| 631 | } | 634 | } |
| 632 | 635 | ||
