This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] hesiod_end: Do not call res_nclose(&_res) [BZ #19573]


* Anders Kaseorg:

> 2016-04-22  Anders Kaseorg  <andersk@mit.edu>
>
> 	[BZ #19573]
> 	* hesiod/hesiod.c (hesiod_end): Only call res_nclose(ctx->res) if
> 	ctx->free_res is nonnull, to prevent a crash on res_nclose(&res)
> 	introduced by commit 2212c1420c92a33b0e0bd9a34938c9814a56c0f7
> 	(Simplify handling of nameserver configuration in resolver).
>
> diff --git a/hesiod/hesiod.c b/hesiod/hesiod.c
> index 657dabe..a540382 100644
> --- a/hesiod/hesiod.c
> +++ b/hesiod/hesiod.c
> @@ -152,12 +152,12 @@ hesiod_end(void *context) {
>  	struct hesiod_p *ctx = (struct hesiod_p *) context;
>  	int save_errno = errno;
>  
> -	if (ctx->res)
> +	if (ctx->res && ctx->free_res) {
>  		res_nclose(ctx->res);
> +		(*ctx->free_res)(ctx->res);
> +	}

Please use GNU style (braces on separate lines, two-space
indentation).

>  	free(ctx->RHS);
>  	free(ctx->LHS);
> -	if (ctx->res && ctx->free_res)
> -		(*ctx->free_res)(ctx->res);

This is one way to fix this bug.  Its correctness depends on whether
we export in any way the hesiod functionality.  I thought we did, but
libhesiod is actually a separate thing, and checking with eu-readelf,
I don't see any exports of the helper functions.

If there are no external users of the callback mechanism, we do not
have to worry about the behavioral change.

I would welcome a quick double-check on this aspect.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]