[PATCH] Fixes for winbindd
Stefan (metze) Metzmacher
metze at samba.org
Thu Jul 31 02:49:56 MDT 2014
Am 31.07.2014 um 10:28 schrieb Andrew Bartlett:
> On Sat, 2014-07-26 at 09:44 +1200, Andrew Bartlett wrote:
>> On Fri, 2014-07-25 at 22:59 +0200, Volker Lendecke wrote:
>>> On Sat, Jul 26, 2014 at 08:26:18AM +1200, Andrew Bartlett wrote:
>>>> netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords_send() creates
>>>> state on mem_ctx, which is frame in
>>>> netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords()
>>>>
>>>> struct netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords_state *state;
>>>> struct tevent_req *subreq;
>>>>
>>>> req = tevent_req_create(mem_ctx, &state,
>>>> struct netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords_state);
>>>> if (req == NULL) {
>>>> return NULL;
>>>> }
>>>>
>>>> The state->dns_names is an in/out parameter as dns_names to
>>>> netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords() and has a longer
>>>> life time.
>>>>
>>>> The issue isn't the async, it is that the memory needs to be around
>>>> longer than the state variable.
>>>>
>>>> The typical approach of a talloc_steal won't work, due to the way the
>>>> ref variable is overwritten. The struct NL_DNS_NAME_INFO_ARRAY
>>>> dns_names is the original input array, but the elements are overwritten
>>>> in dcerpc_netr_DsrUpdateReadOnlyServerDnsRecords_done()
>>>
>>> Ok, understood. To be honest, I'd call this a bug in the way
>>> pidl generates code. I'm not sure there's a better way to do
>>> it, but this is really, really obscure. I'd like to hear
>>> what metze has to say about this before it goes in.
>>>
>>> The pure fact that this crash initially went in shows that
>>> something is wrong.
>>
>> I do feel the same. It seems to me that in/out variables used this way
>> should be the talloc children of what we pass in, and/or that the
>> structure (rather than argument based) calling convention could have
>> made this clearer.
>
> Can we please push these patches? I still want metze's view, but I
> think the patches are as correct as things can be right now, and so
> should go in while we restructure the pidl generator.
The patches are fine.
The argument based wrappers are more complex as the REF_ALLOC behavior
for the struct based functions is different between, source4/librpc
and source3/rpc_client/.
We might simplify this in future, but that requires audits of existing
callers.
metze
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 246 bytes
Desc: OpenPGP digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20140731/91569038/attachment.pgp>
More information about the samba-technical
mailing list