lkml.org 
[lkml]   [2007]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] sysfs: kill an extra put in sysfs_create_link() failure path
    On Wed, 18 Jul 2007 16:14:45 +0900,
    Tejun Heo <htejun@gmail.com> wrote:

    > There is a subtle bug in sysfs_create_link() failure path. When
    > symlink creation fails because there's already a node with the same
    > name, the target sysfs_dirent is put twice - once by failure path of
    > sysfs_create_link() and once more when the symlink is released.
    >
    > Fix it by making only the symlink node responsible for putting
    > target_sd.
    >
    > Signed-off-by: Tejun Heo <htejun@gmail.com>
    > ---
    > Gabriel, Miles, please verify this fixes your problem. Thanks.
    >
    > fs/sysfs/symlink.c | 2 ++
    > 1 file changed, 2 insertions(+)
    >
    > diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
    > index 2f86e04..d056e96 100644
    > --- a/fs/sysfs/symlink.c
    > +++ b/fs/sysfs/symlink.c
    > @@ -86,7 +86,9 @@ int sysfs_create_link(struct kobject * kobj, struct kobject * target, const char
    > sd = sysfs_new_dirent(name, S_IFLNK|S_IRWXUGO, SYSFS_KOBJ_LINK);
    > if (!sd)
    > goto out_put;
    > +
    > sd->s_elem.symlink.target_sd = target_sd;
    > + target_sd = NULL; /* reference is now owned by the symlink */
    >
    > sysfs_addrm_start(&acxt, parent_sd);
    >

    A subtle bug indeed. The patch looks sane to me.

    Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-07-18 13:19    [W:9.308 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site