dpward / rpms / sssd

Forked from rpms/sssd 3 years ago
Clone

Blame SOURCES/0152-KRB5-Fix-access_provider-krb5.patch

ecf709
From 3ee575c2852adb9d5a5c0a4616c082afc6779a8e Mon Sep 17 00:00:00 2001
ecf709
From: Jakub Hrozek <jhrozek@redhat.com>
ecf709
Date: Thu, 1 Jun 2017 09:51:31 +0200
ecf709
Subject: [PATCH 152/152] KRB5: Fix access_provider=krb5
ecf709
MIME-Version: 1.0
ecf709
Content-Type: text/plain; charset=UTF-8
ecf709
Content-Transfer-Encoding: 8bit
ecf709
ecf709
The domain type (posix or not) was being sent to the krb5_child always,
ecf709
but the buffer only had enough space in case of authentication, not
ecf709
authorization. Bug was introduced in the commit
ecf709
  861ab44e8148208425b67c4711bc8fade10fd3ed
ecf709
ecf709
This patch makes the buffer one uint32_t unit larger.
ecf709
ecf709
To reproduce, just set up sssd.conf with:
ecf709
    access_provider = krb5
ecf709
ecf709
Without the patch, you would see messages like:
ecf709
    ==14111== Invalid write of size 2
ecf709
    ==14111==    at 0x4C3041B: memcpy@@GLIBC_2.14 (vg_replace_strmem.c:1018)
ecf709
    ==14111==    by 0xE0EE275: safealign_memcpy (util_safealign.h:51)
ecf709
    ==14111==    by 0xE0EECB3: create_send_buffer (krb5_child_handler.c:239)
ecf709
    ==14111==    by 0xE0EFDDE: handle_child_send (krb5_child_handler.c:529)
ecf709
    ==14111==    by 0xE0EDEDD: krb5_access_send (krb5_access.c:149)
ecf709
    ==14111==    by 0xE0ED32F: krb5_pam_handler_send (krb5_auth.c:1250)
ecf709
    ==14111==    by 0x418868: file_dp_request (dp_request.c:254)
ecf709
    ==14111==    by 0x418976: dp_req_send (dp_request.c:300)
ecf709
    ==14111==    by 0x41C25F: dp_pam_handler (dp_target_auth.c:219)
ecf709
    ==14111==    by 0x52B3456: sbus_request_invoke_or_finish (sssd_dbus_request.c:71)
ecf709
    ==14111==    by 0x52B0F37: sbus_message_handler_got_caller_id (sssd_dbus_interface.c:1048)
ecf709
    ==14111==    by 0x923C923: tevent_common_loop_immediate (tevent_immediate.c:135)
ecf709
    ==14111==  Address 0x126ab506 is 150 bytes inside a block of size 151 alloc'd
ecf709
    ==14111==    at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)
ecf709
    ==14111==    by 0x944D7F4: __talloc_with_prefix (talloc.c:698)
ecf709
    ==14111==    by 0x944D7F4: __talloc (talloc.c:739)
ecf709
    ==14111==    by 0x944D7F4: _talloc_named_const (talloc.c:896)
ecf709
    ==14111==    by 0x944D7F4: talloc_named_const (talloc.c:1675)
ecf709
    ==14111==    by 0xE0EE7B6: create_send_buffer (krb5_child_handler.c:185)
ecf709
    ==14111==    by 0xE0EFDDE: handle_child_send (krb5_child_handler.c:529)
ecf709
    ==14111==    by 0xE0EDEDD: krb5_access_send (krb5_access.c:149)
ecf709
    ==14111==    by 0xE0ED32F: krb5_pam_handler_send (krb5_auth.c:1250)
ecf709
    ==14111==    by 0x418868: file_dp_request (dp_request.c:254)
ecf709
    ==14111==    by 0x418976: dp_req_send (dp_request.c:300)
ecf709
    ==14111==    by 0x41C25F: dp_pam_handler (dp_target_auth.c:219)
ecf709
    ==14111==    by 0x52B3456: sbus_request_invoke_or_finish (sssd_dbus_request.c:71)
ecf709
    ==14111==    by 0x52B0F37: sbus_message_handler_got_caller_id (sssd_dbus_interface.c:1048)
ecf709
    ==14111==    by 0x923C923: tevent_common_loop_immediate (tevent_immediate.c:135)
ecf709
ecf709
Resolves:
ecf709
https://pagure.io/SSSD/sssd/issue/3418
ecf709
ecf709
Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
ecf709
---
ecf709
 src/providers/krb5/krb5_child_handler.c | 4 ++--
ecf709
 1 file changed, 2 insertions(+), 2 deletions(-)
ecf709
ecf709
diff --git a/src/providers/krb5/krb5_child_handler.c b/src/providers/krb5/krb5_child_handler.c
ecf709
index 87e79a06e917aadb622455bccfc2e9c6769f70c2..11ac867e62d2ff96b827cf6d4ff341fc8ff0a286 100644
ecf709
--- a/src/providers/krb5/krb5_child_handler.c
ecf709
+++ b/src/providers/krb5/krb5_child_handler.c
ecf709
@@ -156,14 +156,14 @@ static errno_t create_send_buffer(struct krb5child_req *kr,
ecf709
         return ENOMEM;
ecf709
     }
ecf709
 
ecf709
-    buf->size = 8*sizeof(uint32_t) + strlen(kr->upn);
ecf709
+    buf->size = 9*sizeof(uint32_t) + strlen(kr->upn);
ecf709
 
ecf709
     if (kr->pd->cmd == SSS_PAM_AUTHENTICATE ||
ecf709
         kr->pd->cmd == SSS_PAM_PREAUTH ||
ecf709
         kr->pd->cmd == SSS_CMD_RENEW ||
ecf709
         kr->pd->cmd == SSS_PAM_CHAUTHTOK_PRELIM ||
ecf709
         kr->pd->cmd == SSS_PAM_CHAUTHTOK) {
ecf709
-        buf->size += 5*sizeof(uint32_t) + strlen(kr->ccname) + strlen(keytab) +
ecf709
+        buf->size += 4*sizeof(uint32_t) + strlen(kr->ccname) + strlen(keytab) +
ecf709
                      sss_authtok_get_size(kr->pd->authtok);
ecf709
 
ecf709
         buf->size += sizeof(uint32_t);
ecf709
-- 
ecf709
2.9.4
ecf709