On Tue, May 17, 2011 at 8:43 PM, Venkateswararao Jujjuri (JV)
<jv...@linux.vnet.ibm.com> wrote:
> @@ -3621,8 +3605,13 @@ static void v9fs_readlink(void *opaque)
>
>     v9fs_string_init(&vs->target);
>     err = v9fs_do_readlink(s, &fidp->path, &vs->target);
> -    v9fs_readlink_post_readlink(s, vs, err);
> -    return;
> +    if (err < 0) {
> +        err = -errno;
> +        goto out;
> +    }
> +    vs->offset += pdu_marshal(vs->pdu, vs->offset, "s", &vs->target);
> +    err = vs->offset;
> +    v9fs_string_free(&vs->target);
>  out:

The vs->target string should be freed when v9fs_do_readlink() fails.
v9fs_do_readlink() *always* allocates vs->target.data, it doesn't free
it on error.

Stefan

Reply via email to