From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Mike Kravetz <mike.kravetz@oracle.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Sasha Levin <sashal@kernel.org>,
linux-mm@kvack.org
Subject: [PATCH AUTOSEL 4.19 45/52] hugetlbfs: fix memory leak for resv_map
Date: Wed, 24 Apr 2019 10:39:03 -0400 [thread overview]
Message-ID: <20190424143911.28890-45-sashal@kernel.org> (raw)
In-Reply-To: <20190424143911.28890-1-sashal@kernel.org>
From: Mike Kravetz <mike.kravetz@oracle.com>
[ Upstream commit 58b6e5e8f1addd44583d61b0a03c0f5519527e35 ]
When mknod is used to create a block special file in hugetlbfs, it will
allocate an inode and kmalloc a 'struct resv_map' via resv_map_alloc().
inode->i_mapping->private_data will point the newly allocated resv_map.
However, when the device special file is opened bd_acquire() will set
inode->i_mapping to bd_inode->i_mapping. Thus the pointer to the
allocated resv_map is lost and the structure is leaked.
Programs to reproduce:
mount -t hugetlbfs nodev hugetlbfs
mknod hugetlbfs/dev b 0 0
exec 30<> hugetlbfs/dev
umount hugetlbfs/
resv_map structures are only needed for inodes which can have associated
page allocations. To fix the leak, only allocate resv_map for those
inodes which could possibly be associated with page allocations.
Link: http://lkml.kernel.org/r/20190401213101.16476-1-mike.kravetz@oracle.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Reported-by: Yufen Yu <yuyufen@huawei.com>
Suggested-by: Yufen Yu <yuyufen@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/hugetlbfs/inode.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index a7fa037b876b..a3a3d256fb0e 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -741,11 +741,17 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
umode_t mode, dev_t dev)
{
struct inode *inode;
- struct resv_map *resv_map;
+ struct resv_map *resv_map = NULL;
- resv_map = resv_map_alloc();
- if (!resv_map)
- return NULL;
+ /*
+ * Reserve maps are only needed for inodes that can have associated
+ * page allocations.
+ */
+ if (S_ISREG(mode) || S_ISLNK(mode)) {
+ resv_map = resv_map_alloc();
+ if (!resv_map)
+ return NULL;
+ }
inode = new_inode(sb);
if (inode) {
@@ -780,8 +786,10 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
break;
}
lockdep_annotate_inode_mutex_key(inode);
- } else
- kref_put(&resv_map->refs, resv_map_release);
+ } else {
+ if (resv_map)
+ kref_put(&resv_map->refs, resv_map_release);
+ }
return inode;
}
--
2.19.1
next prev parent reply other threads:[~2019-04-24 14:41 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-24 14:38 [PATCH AUTOSEL 4.19 01/52] arm64: dts: rockchip: fix rk3328-roc-cc gmac2io tx/rx_delay Sasha Levin
2019-04-24 14:38 ` Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 02/52] HID: logitech: check the return value of create_singlethread_workqueue Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 03/52] HID: debug: fix race condition with between rdesc_show() and device removal Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 04/52] rtc: cros-ec: Fail suspend/resume if wake IRQ can't be configured Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 05/52] rtc: sh: Fix invalid alarm warning for non-enabled alarm Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 06/52] batman-adv: Reduce claim hash refcnt only for removed entry Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 07/52] batman-adv: Reduce tt_local " Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 08/52] batman-adv: Reduce tt_global " Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 09/52] batman-adv: fix warning in function batadv_v_elp_get_throughput Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 10/52] ARM: dts: rockchip: Fix gpu opp node names for rk3288 Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 11/52] reset: meson-audio-arb: Fix missing .owner setting of reset_controller_dev Sasha Levin
2019-04-24 14:38 ` Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 12/52] igb: Fix WARN_ONCE on runtime suspend Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 13/52] fm10k: Fix a potential NULL pointer dereference Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 14/52] riscv: fix accessing 8-byte variable from RV32 Sasha Levin
2019-04-24 14:38 ` Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 15/52] HID: quirks: Fix keyboard + touchpad on Lenovo Miix 630 Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 16/52] net: hns3: fix compile error Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 17/52] net/mlx5: E-Switch, Fix esw manager vport indication for more vport commands Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 18/52] bonding: show full hw address in sysfs for slave entries Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 19/52] net: stmmac: use correct DMA buffer size in the RX descriptor Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 20/52] net: stmmac: ratelimit RX error logs Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 21/52] net: stmmac: don't stop NAPI processing when dropping a packet Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 22/52] net: stmmac: don't overwrite discard_frame status Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 23/52] net: stmmac: fix dropping of multi-descriptor RX frames Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 24/52] net: stmmac: don't log oversized frames Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 25/52] jffs2: fix use-after-free on symlink traversal Sasha Levin
2019-04-24 14:38 ` Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 26/52] debugfs: " Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 27/52] mfd: twl-core: Disable IRQ while suspended Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 28/52] block: use blk_free_flush_queue() to free hctx->fq in blk_mq_init_hctx Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 29/52] rtc: da9063: set uie_unsupported when relevant Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 30/52] HID: input: add mapping for Assistant key Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 31/52] vfio/pci: use correct format characters Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 32/52] vfio/type1: Limit DMA mappings per container Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 33/52] scsi: core: add new RDAC LENOVO/DE_Series device Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 34/52] scsi: storvsc: Fix calculation of sub-channel count Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 35/52] arm/mach-at91/pm : fix possible object reference leak Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 36/52] arm64: fix wrong check of on_sdei_stack in nmi context Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 37/52] net: hns: fix KASAN: use-after-free in hns_nic_net_xmit_hw() Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 38/52] net: hns: Use NAPI_POLL_WEIGHT for hns driver Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 39/52] net: hns: Fix probabilistic memory overwrite when HNS driver initialized Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 40/52] net: hns: fix ICMP6 neighbor solicitation messages discard problem Sasha Levin
2019-04-24 14:38 ` [PATCH AUTOSEL 4.19 41/52] net: hns: Fix WARNING when remove HNS driver with SMMU enabled Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 42/52] libcxgb: fix incorrect ppmax calculation Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 43/52] KVM: SVM: prevent DBG_DECRYPT and DBG_ENCRYPT overflow Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 44/52] kmemleak: powerpc: skip scanning holes in the .bss section Sasha Levin
2019-04-24 14:39 ` Sasha Levin
2019-04-24 14:39 ` Sasha Levin
2019-04-24 14:39 ` Sasha Levin [this message]
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 46/52] sh: fix multiple function definition build errors Sasha Levin
2019-04-24 14:39 ` Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 47/52] kernel/sysctl.c: fix out-of-bounds access when setting file-max Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 48/52] xsysace: Fix error handling in ace_setup Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 49/52] fs: stream_open - opener for stream-like files so that read and write can run simultaneously without deadlock Sasha Levin
2019-04-24 16:34 ` Greg Kroah-Hartman
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 50/52] ARM: orion: don't use using 64-bit DMA masks Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 51/52] ARM: iop: " Sasha Levin
2019-04-24 14:39 ` [PATCH AUTOSEL 4.19 52/52] aio: fold lookup_kiocb() into its sole caller Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190424143911.28890-45-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mike.kravetz@oracle.com \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.