From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757243AbcFAKxp (ORCPT ); Wed, 1 Jun 2016 06:53:45 -0400 Received: from smtp15.cstnet.cn ([159.226.251.15]:46807 "EHLO cstnet.cn" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751423AbcFAKxo (ORCPT ); Wed, 1 Jun 2016 06:53:44 -0400 X-Greylist: delayed 414 seconds by postgrey-1.27 at vger.kernel.org; Wed, 01 Jun 2016 06:53:43 EDT From: Zhouyi Zhou To: akpm@linux-foundation.org, penberg@kernel.org, viro@zeniv.linux.org.uk, linux-kernel@vger.kernel.org Cc: Zhouyi Zhou , Zhouyi Zhou Subject: [PATCH] relay: fix potential memory leak Date: Wed, 1 Jun 2016 18:45:27 +0800 Message-Id: <1464777927-19675-1-git-send-email-yizhouzhou@ict.ac.cn> X-Mailer: git-send-email 1.9.1 X-CM-TRANSID: UgCowJCrGuvMvE5XJIoUAw--.48317S3 X-Coremail-Antispam: 1UD129KBjvdXoW7XF1fuFyUGw1fuFy8trWxCrg_yoWDuFb_u3 y8WF48Wa4UGa4UZa17Ja13Xr4DG3y8CFyfuwsFyr47XF98JF9Ikr9ayF95CF1UGay3KF90 yr90qFsxCwn2gjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJTRUUUboxFF20E14v26r4j6ryUM7CY07I20VC2zVCF04k26cxKx2IYs7xG 6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2z4x0Y4vE2Ix0cI8IcVAFwI 0_Xr0_Ar1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UM28EF7xvwVC2z280aVAF wI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcxkEcVAq07x20x vEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r106r15McIj 6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7 xvr2IYc2Ij64vIr40E4x8a64kEw24lF7I21c0EjII2zVCS5cI20VAGYxC7MxkIecxEwVAF wVW8twCF04k20xvY0x0EwIxGrwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14 v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6rW3Jr0E3s 1lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVWUJVW8JbIYCTnI WIevJa73UjIFyTuYvj4RJUUUUUUUU X-CM-SenderInfo: x1l2x05x2k03g6lf3hldfou0/ Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org when relay_open_buf fails in relay_open, program will goto free_bufs, but chan is nowhere freed. In addition, give warning to users who forget to provide create file hook. Signed-off-by: Zhouyi Zhou --- kernel/relay.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/relay.c b/kernel/relay.c index 074994b..e0990c7 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -589,6 +589,13 @@ struct rchan *relay_open(const char *base_filename, chan->parent = parent; chan->private_data = private_data; if (base_filename) { + if (!cb || !cb->create_buf_file) { + printk(KERN_ERR + "relay_open: has base filename without " + "providing hook to create file\n"); + kfree(chan); + return NULL; + } chan->has_base_filename = 1; strlcpy(chan->base_filename, base_filename, NAME_MAX); } @@ -614,6 +621,7 @@ free_bufs: kref_put(&chan->kref, relay_destroy_channel); mutex_unlock(&relay_channels_mutex); + kfree(chan); return NULL; } EXPORT_SYMBOL_GPL(relay_open); -- 1.9.1