ocfs2: fix memory leak

Stanse found that o2hb_heartbeat_group_make_item leaks some memory on
fail paths. Fix the paths by adding a new label and jump there.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <joel.becker@oracle.com>
Cc: ocfs2-devel@oss.oracle.com
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Joel Becker <joel.becker@oracle.com>

authored by Jiri Slaby and committed by Joel Becker 1cf257f5 a48a982a

+10 -4
+10 -4
fs/ocfs2/cluster/heartbeat.c
··· 1964 1964 if (reg == NULL) 1965 1965 return ERR_PTR(-ENOMEM); 1966 1966 1967 - if (strlen(name) > O2HB_MAX_REGION_NAME_LEN) 1968 - return ERR_PTR(-ENAMETOOLONG); 1967 + if (strlen(name) > O2HB_MAX_REGION_NAME_LEN) { 1968 + ret = -ENAMETOOLONG; 1969 + goto free; 1970 + } 1969 1971 1970 1972 spin_lock(&o2hb_live_lock); 1971 1973 reg->hr_region_num = 0; ··· 1976 1974 O2NM_MAX_REGIONS); 1977 1975 if (reg->hr_region_num >= O2NM_MAX_REGIONS) { 1978 1976 spin_unlock(&o2hb_live_lock); 1979 - return ERR_PTR(-EFBIG); 1977 + ret = -EFBIG; 1978 + goto free; 1980 1979 } 1981 1980 set_bit(reg->hr_region_num, o2hb_region_bitmap); 1982 1981 } ··· 1989 1986 ret = o2hb_debug_region_init(reg, o2hb_debug_dir); 1990 1987 if (ret) { 1991 1988 config_item_put(&reg->hr_item); 1992 - return ERR_PTR(ret); 1989 + goto free; 1993 1990 } 1994 1991 1995 1992 return &reg->hr_item; 1993 + free: 1994 + kfree(reg); 1995 + return ERR_PTR(ret); 1996 1996 } 1997 1997 1998 1998 static void o2hb_heartbeat_group_drop_item(struct config_group *group,