possible bug in 1.6.1 gic_opt.c
Mike Dopheide
dopheide at ncsa.uiuc.edu
Wed May 2 13:25:51 EDT 2007
This tests out okay. I'm assuming the k5-int.h patch was still needed,
is that correct?
-Mike
Jeffrey Altman wrote:
> Here is the correct / tested patch. It applies to gic_opt.c not
> gc_frm_kdc.c.
>
> Index: gic_opt.c
> ===================================================================
> --- gic_opt.c (revision 19536)
> +++ gic_opt.c (working copy)
> @@ -206,11 +206,21 @@
> oe = krb5int_gic_opte_alloc(context);
> if (NULL == oe)
> return ENOMEM;
> - memcpy(oe, opt, sizeof(*opt));
> - /* Fix these -- overwritten by the copy */
> - oe->flags |= ( KRB5_GET_INIT_CREDS_OPT_EXTENDED |
> - KRB5_GET_INIT_CREDS_OPT_SHADOWED);
> +
> + if (opt)
> + memcpy(oe, opt, sizeof(*opt));
>
> + /*
> + * Fix the flags -- the EXTENDED flag would have been
> + * overwritten by the copy if there was one. The
> + * SHADOWED flag is necessary to ensure that the
> + * krb5_gic_opt_ext structure that was allocated
> + * here will be freed by the library because the
> + * application is unaware of its existence.
> + */
> + oe->flags |= (KRB5_GET_INIT_CREDS_OPT_EXTENDED |
> + KRB5_GET_INIT_CREDS_OPT_SHADOWED);
> +
> *opte = oe;
> return 0;
> }
>
> Jeffrey Altman wrote:
>> You will also need this patch to src/lib/krb5/krb/gc_frm_kdc.c:
>>
>> Index: gic_opt.c
>> ===================================================================
>> --- gic_opt.c (revision 19536)
>> +++ gic_opt.c (working copy)
>> @@ -206,7 +206,11 @@
>> oe = krb5int_gic_opte_alloc(context);
>> if (NULL == oe)
>> return ENOMEM;
>> - memcpy(oe, opt, sizeof(*opt));
>> + if (opt)
>> + memcpy(oe, opt, sizeof(*opt));
>> + else
>> + memset(oe, 0, sizeof(*opt));
>> +
>> /* Fix these -- overwritten by the copy */
>> oe->flags |= ( KRB5_GET_INIT_CREDS_OPT_EXTENDED |
>> KRB5_GET_INIT_CREDS_OPT_SHADOWED);
>>
>> Jeffrey Altman wrote:
>>> Please try this patch to src/include/k5-int.h:
>>>
>>> Index: k5-int.h
>>> ===================================================================
>>> --- k5-int.h (revision 19525)
>>> +++ k5-int.h (working copy)
>>> @@ -1048,9 +1048,9 @@
>>> #define KRB5_GET_INIT_CREDS_OPT_SHADOWED 0x40000000
>>>
>>> #define krb5_gic_opt_is_extended(s) \
>>> - (((s)->flags & KRB5_GET_INIT_CREDS_OPT_EXTENDED) ? 1 : 0)
>>> + ((s) && ((s)->flags & KRB5_GET_INIT_CREDS_OPT_EXTENDED) ? 1 : 0)
>>> #define krb5_gic_opt_is_shadowed(s) \
>>> - (((s)->flags & KRB5_GET_INIT_CREDS_OPT_SHADOWED) ? 1 : 0)
>>> + ((s) && ((s)->flags & KRB5_GET_INIT_CREDS_OPT_SHADOWED) ? 1 : 0)
>>>
>>>
>>> typedef struct _krb5_gic_opt_private {
>>>
>>>
>>> Jeffrey Altman
>>> Secure Endpoints Inc.
>>>
>>>
>>> Mike Dopheide wrote:
>>>> We're testing OpenSSH (with GSSAPI patches) and MIT Kerberos 1.6.1 on
>>>> RedHat Linux 4 (x86_64). We're seeing a segfault in
>>>> krb5_get_init_creds_password. Below is a backtrace and comments (Thanks
>>>> Jim).
>>>>
>>>> Program received signal SIGSEGV, Segmentation fault.
>>>> krb5int_gic_opt_to_opte (context=0x571fb0, opt=0x0, opte=0x7fbfffd4e8,
>>>> force=1, where=0x2a962d40b7 "krb5_get_init_creds_password")
>>>> at ../../../../krb5-1.6.1.ncsa/src/lib/krb5/krb/gic_opt.c:235
>>>> 235 ../../../../krb5-1.6.1.ncsa/src/lib/krb5/krb/gic_opt.c: No
>>>> such file or directory.
>>>> in ../../../../krb5-1.6.1.ncsa/src/lib/krb5/krb/gic_opt.c
>>>> (gdb) backtrace
>>>> #0 krb5int_gic_opt_to_opte (context=0x571fb0, opt=0x0,
>>>> opte=0x7fbfffd4e8, force=1, where=0x2a962d40b7
>>>> "krb5_get_init_creds_password")
>>>> at ../../../../krb5-1.6.1.ncsa/src/lib/krb5/krb/gic_opt.c:235
>>>>
>>>> "This line is dereferencing opt, which is NULL. It needs a check for
>>>> opt==NULL."
>>>>
>>>> #1 0x0000002a962a9a3b in krb5_get_init_creds_password
>>>> (context=0x571fb0, creds=0x7fbfffe350, client=0x571710,
>>>> password=0x571d70 "vintage1990Z", prompter=0, data=0x0, start_time=0,
>>>> in_tkt_service=0x0, options=0x0)
>>>> at ../../../../krb5-1.6.1.ncsa/src/lib/krb5/krb/gic_pwd.c:132
>>>>
>>>> "Probably shouldn't be calling krb5int_gic_opt_to_opte() here if
>>>> options==NULL."
>>>>
>>>> If time permits tomorrow I'll see about writing a patch and retesting.
>>>>
>>>> -Mike
>>>> _______________________________________________
>>>> krbdev mailing list krbdev at mit.edu
>>>> https://mailman.mit.edu/mailman/listinfo/krbdev
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> krbdev mailing list krbdev at mit.edu
>>>> https://mailman.mit.edu/mailman/listinfo/krbdev
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> krbdev mailing list krbdev at mit.edu
>>>> https://mailman.mit.edu/mailman/listinfo/krbdev
>
>
More information about the krbdev
mailing list