2017-08-01 20:25:21

by Weston Andros Adamson

[permalink] [raw]
Subject: [PATCH] nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays

The client was freeing the nfs4_ff_layout_ds, but not the contained
nfs4_ff_ds_version array.

Signed-off-by: Weston Andros Adamson <[email protected]>
---
fs/nfs/flexfilelayout/flexfilelayoutdev.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
index 6df7a0cf5660..f32c58bbe556 100644
--- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
+++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
@@ -32,6 +32,7 @@ void nfs4_ff_layout_free_deviceid(struct nfs4_ff_layout_ds *mirror_ds)
{
nfs4_print_deviceid(&mirror_ds->id_node.deviceid);
nfs4_pnfs_ds_put(mirror_ds->ds);
+ kfree(mirror_ds->ds_versions);
kfree_rcu(mirror_ds, id_node.rcu);
}

--
2.11.0 (Apple Git-81)



2017-08-03 02:07:30

by Weston Andros Adamson

[permalink] [raw]
Subject: Re: [PATCH] nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays

This should probably be CCed to some stable releases too. I'll figure it =
out soon.

-dros

> On Aug 1, 2017, at 4:25 PM, Weston Andros Adamson <[email protected]> =
wrote:
>=20
> The client was freeing the nfs4_ff_layout_ds, but not the contained
> nfs4_ff_ds_version array.
>=20
> Signed-off-by: Weston Andros Adamson <[email protected]>
> ---
> fs/nfs/flexfilelayout/flexfilelayoutdev.c | 1 +
> 1 file changed, 1 insertion(+)
>=20
> diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c =
b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
> index 6df7a0cf5660..f32c58bbe556 100644
> --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
> +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
> @@ -32,6 +32,7 @@ void nfs4_ff_layout_free_deviceid(struct =
nfs4_ff_layout_ds *mirror_ds)
> {
> nfs4_print_deviceid(&mirror_ds->id_node.deviceid);
> nfs4_pnfs_ds_put(mirror_ds->ds);
> + kfree(mirror_ds->ds_versions);
> kfree_rcu(mirror_ds, id_node.rcu);
> }
>=20
> --=20
> 2.11.0 (Apple Git-81)
>=20


2017-08-03 12:57:12

by Mkrtchyan, Tigran

[permalink] [raw]
Subject: Re: [PATCH] nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays

Hi Dros,

can this leak be the source of issue described here: http://www.spinics.net/lists/linux-nfs/msg64890.html

Tigran.

----- Original Message -----
> From: "Weston Andros Adamson" <[email protected]>
> To: "Trond Myklebust" <[email protected]>, "Anna Schumaker" <[email protected]>
> Cc: "linux-nfs" <[email protected]>
> Sent: Thursday, August 3, 2017 4:07:28 AM
> Subject: Re: [PATCH] nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays

> This should probably be CCed to some stable releases too. I'll figure it out
> soon.
>
> -dros
>
>> On Aug 1, 2017, at 4:25 PM, Weston Andros Adamson <[email protected]> wrote:
>>
>> The client was freeing the nfs4_ff_layout_ds, but not the contained
>> nfs4_ff_ds_version array.
>>
>> Signed-off-by: Weston Andros Adamson <[email protected]>
>> ---
>> fs/nfs/flexfilelayout/flexfilelayoutdev.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>> b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>> index 6df7a0cf5660..f32c58bbe556 100644
>> --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>> +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>> @@ -32,6 +32,7 @@ void nfs4_ff_layout_free_deviceid(struct nfs4_ff_layout_ds
>> *mirror_ds)
>> {
>> nfs4_print_deviceid(&mirror_ds->id_node.deviceid);
>> nfs4_pnfs_ds_put(mirror_ds->ds);
>> + kfree(mirror_ds->ds_versions);
>> kfree_rcu(mirror_ds, id_node.rcu);
>> }
>>
>> --
>> 2.11.0 (Apple Git-81)
>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2017-08-11 14:18:26

by Weston Andros Adamson

[permalink] [raw]
Subject: Re: [PATCH] nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays

Hey Tigran,

I don't think so, this fixes a simple memory leak where memory is not =
freed and nothing holds a reference to it. It should not lead to any =
invalid pointers, but will eventually lead to the OOM killer killing a =
bunch of processes.

There have been other recent changes that may have addressed this. Can =
you reproduce with the latest changes?

-dros

> On Aug 3, 2017, at 8:57 AM, Mkrtchyan, Tigran =
<[email protected]> wrote:
>=20
> Hi Dros,
>=20
> can this leak be the source of issue described here: =
http://www.spinics.net/lists/linux-nfs/msg64890.html
>=20
> Tigran.
>=20
> ----- Original Message -----
>> From: "Weston Andros Adamson" <[email protected]>
>> To: "Trond Myklebust" <[email protected]>, "Anna =
Schumaker" <[email protected]>
>> Cc: "linux-nfs" <[email protected]>
>> Sent: Thursday, August 3, 2017 4:07:28 AM
>> Subject: Re: [PATCH] nfs/flexfiles: fix leak of nfs4_ff_ds_version =
arrays
>=20
>> This should probably be CCed to some stable releases too. I'll figure =
it out
>> soon.
>>=20
>> -dros
>>=20
>>> On Aug 1, 2017, at 4:25 PM, Weston Andros Adamson <[email protected]> =
wrote:
>>>=20
>>> The client was freeing the nfs4_ff_layout_ds, but not the contained
>>> nfs4_ff_ds_version array.
>>>=20
>>> Signed-off-by: Weston Andros Adamson <[email protected]>
>>> ---
>>> fs/nfs/flexfilelayout/flexfilelayoutdev.c | 1 +
>>> 1 file changed, 1 insertion(+)
>>>=20
>>> diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> index 6df7a0cf5660..f32c58bbe556 100644
>>> --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
>>> @@ -32,6 +32,7 @@ void nfs4_ff_layout_free_deviceid(struct =
nfs4_ff_layout_ds
>>> *mirror_ds)
>>> {
>>> nfs4_print_deviceid(&mirror_ds->id_node.deviceid);
>>> nfs4_pnfs_ds_put(mirror_ds->ds);
>>> + kfree(mirror_ds->ds_versions);
>>> kfree_rcu(mirror_ds, id_node.rcu);
>>> }
>>>=20
>>> --
>>> 2.11.0 (Apple Git-81)
>>>=20
>>=20
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" =
in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html