lkml.org 
[lkml]   [2022]   [Aug]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/6] mm/hugetlb: fix sysfs group leak in hugetlb_unregister_node()
    Date
    The sysfs group per_node_hstate_attr_group and hstate_demote_attr_group
    when h->demote_order != 0 are created in hugetlb_register_node(). But
    these sysfs groups are not removed when unregister the node, thus sysfs
    group is leaked. Using sysfs_remove_group() to fix this issue.

    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    ---
    mm/hugetlb.c | 25 ++++++++++++++++++-------
    1 file changed, 18 insertions(+), 7 deletions(-)

    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index b69d7808f457..e1356ad57087 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -3850,12 +3850,18 @@ static int hugetlb_sysfs_add_hstate(struct hstate *h, struct kobject *parent,
    }

    if (h->demote_order) {
    - if (sysfs_create_group(hstate_kobjs[hi],
    - &hstate_demote_attr_group))
    + retval = sysfs_create_group(hstate_kobjs[hi],
    + &hstate_demote_attr_group);
    + if (retval) {
    pr_warn("HugeTLB unable to create demote interfaces for %s\n", h->name);
    + sysfs_remove_group(hstate_kobjs[hi], hstate_attr_group);
    + kobject_put(hstate_kobjs[hi]);
    + hstate_kobjs[hi] = NULL;
    + return retval;
    + }
    }

    - return retval;
    + return 0;
    }

    static void __init hugetlb_sysfs_init(void)
    @@ -3941,10 +3947,15 @@ static void hugetlb_unregister_node(struct node *node)

    for_each_hstate(h) {
    int idx = hstate_index(h);
    - if (nhs->hstate_kobjs[idx]) {
    - kobject_put(nhs->hstate_kobjs[idx]);
    - nhs->hstate_kobjs[idx] = NULL;
    - }
    + struct kobject *hstate_kobj = nhs->hstate_kobjs[idx];
    +
    + if (!hstate_kobj)
    + continue;
    + if (h->demote_order)
    + sysfs_remove_group(hstate_kobj, &hstate_demote_attr_group);
    + sysfs_remove_group(hstate_kobj, &per_node_hstate_attr_group);
    + kobject_put(hstate_kobj);
    + nhs->hstate_kobjs[idx] = NULL;
    }

    kobject_put(nhs->hugepages_kobj);
    --
    2.23.0
    \
     
     \ /
      Last update: 2022-08-16 15:08    [W:3.942 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site